我按照railstutorial.org中的教程。我注意到如果我使用网址 本地主机:3000 /用户/ 102
登录或退出,我可以查看个人资料。如果我将102更改为另一个现有用户,我也可以查看它。如何限制对此页面的访问?我希望只有当前用户才能查看他/她的个人资料。
我是rails的新手。
我知道它必须在代码
中使用users_controller.erbdef show
@user = User.find(params[:id])
end
答案 0 :(得分:3)
这取决于您如何定义current_user帮助程序。例如,如果您使用Devise进行身份验证,那么它将是if current_user == @user
,但我相信该教程的帮助程序,下面的方法应该可以正常工作。
def show
@user = User.find(params[:id])
if current_user?(@user)
# show page
else
# render error page?
flash[:error] = "Nope" # Clearly here you can do whatever you want, from error pages to redirections
redirect_to root_path
end
end
答案 1 :(得分:0)
似乎正确的解决方案是添加另一个功能
在顶部它将是
before_action :correct_user, only: [:edit, :update]
before_action :correct_user_return, only: [:show]
然后在私人部分中它将是
def correct_user_return
@user = User.find(params[:id])
redirect_to current_user unless current_user?(@user)
end