仅在用户登录时显示页面?红宝石/设计

时间:2014-12-19 00:58:40

标签: ruby-on-rails authentication devise

我正在使用rails构建应用程序并进行用户身份验证我正在使用Devise。

除非用户已登录,否则我想知道如何限制对某些网页的访问权限。 我猜我必须更改我的特定页面控制器上的代码,但我不确定如何。

此外,如果未经过身份验证的用户想要访问该页面,我该如何限制它?

非常感谢!

3 个答案:

答案 0 :(得分:6)

您可以在页面上执行以下操作:

<% 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!

official documentation有详细信息

答案 1 :(得分:1)

你应该在你的控制器里面做,你可以使用:

before_filter :authenticate_user! 

就在这一行之后:

class YourController < ApplicationController

您也可以将其缩小到特定的控制器操作,所以假设您想要限制对Create和Destroy操作的访问,您可以这样做:

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

允许他们仍然可以自由访问您的其他操作。希望有所帮助!

答案 2 :(得分:0)

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

您可以做的一件事是在authenticate_user!中使用设计before_action方法。我建议这样做,因为如果没有经过身份验证,它会将用户重定向到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语句限制视图级别的内容,但我不建议这样做,因为它会对您的应用的UX产生负面影响。

查看Devise文档。

此外还有一个很好的宝石可以帮助您处理身份验证问题,但不幸的是它无法帮助您查看用户是否已登录。无论如何,它可能会对您有所帮助,所以我会留在这里。它的名字是CanCan