我正在使用rails构建应用程序并进行用户身份验证我正在使用Devise。
除非用户已登录,否则我想知道如何限制对某些网页的访问权限。 我猜我必须更改我的特定页面控制器上的代码,但我不确定如何。
此外,如果未经过身份验证的用户想要访问该页面,我该如何限制它?
非常感谢!
答案 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!
答案 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