如果用户已登录,显示一个页面?Ruby/Devise

3
我正在使用Rails构建一个应用程序,并使用Devise进行用户身份验证。
我想知道如何限制访问某些页面,除非用户已登录。 我猜我必须更改特定页面控制器上的代码,但我不确定如何操作。
另外,如果未经身份验证的用户想要访问该页面,我该如何限制?
非常感谢!
3个回答

8
您可以在页面上这样做:

您可以在页面上做一些类似于这样的事情:

<% if user_signed_in? %>
  <div> show content here </div>
<%else %>
  <p>Please Sign Up or Sign In to view the content.</p>

  <h2><%= link_to "Sign up", new_user_registration_path%>

<% end %>

希望这能帮到你! 或者在控制器内设置一个 before_action : before_action :authenticate_user! 官方文档 有详细信息。

1
谢谢,这很简单,只需要设置before_action! - adp

2
你应该在控制器中完成此操作,你可以使用以下代码:
```php ```
请将你的代码替换上面的空白区域。
before_filter :authenticate_user! 

就在这行代码之后:

class YourController < ApplicationController

您还可以将其缩小到特定的控制器操作,因此假设您想要限制对特定的Create和Destroy操作的访问,可以执行以下操作:

before_filter :authenticate_user!, only: [:create, :destroy]

希望这能帮到您!

这使得他们仍然可以自由地访问您的其他操作。


非常感谢您的回答。但是对于任何进一步搜索的人,我想指出before_filter在Rails 5.2中不再起作用。我们只使用before_action - Travis Le

0

有几种方法可以做到这一点。

其中一种方法是在before_action中使用devise的authenticate_user!方法。我建议这样做,因为它会在用户未经过身份验证时将其重定向到sign_in页面。

如果您想进行自定义重定向,可以使用您的控制器。像这样做一些事情:

def show
    @user = User.find(params[:id])
    redirect_to root_path unless @user == current_user #if you don't care who the user is I recommend to use user_signed_id? method
end

你也可以使用相同的if语句在视图层面限制内容,但我不建议这样做,因为它可能会对你的应用程序用户体验产生负面影响。

请查看Devise文档。

此外,有一个很好的gem可以帮助你解决身份验证问题,但不幸的是它不能帮助你查看用户是否已登录。无论如何,也许它对你有所帮助,所以我会把它留在这里。它的名字是CanCan


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接