gpt4 book ai didi

ruby-on-rails-3 - 限制用户只能使用 Devise 访问其个人资料

转载 作者:行者123 更新时间:2023-12-02 00:52:14 24 4
gpt4 key购买 nike

我目前已设置我的应用程序,以便在成功登录应用程序时将用户重定向到其位于 localhost:3000/users/id 的个人资料,但是如果我是第一个用户 id = > 1 并输入 users/2 我拥有对此个人资料的完全访问权限。我一直在尝试寻找如何使用设备来阻止这种情况。我对 Rails 还很陌生,所以我确信我错过了一些简单的东西,我已经使用了 before_filter :authenticate_user! 但这显然只是检查用户是否已登录,但并没有'不限制对其他用户个人资料的访问。我读过一些关于 CanCan 的文章,但这对于我想要实现的目标来说似乎有点矫枉过正。非常感谢任何指点。

users_controller.rb

class UsersController < ApplicationController
before_filter :authenticate_user!
before_filter :user_authorization

def index
@users = User.all
end

def show

@user = User.find(current_user[:id])

end


private

def user_authorization
redirect_to(root_url) unless current_user.id == params[:id]
end
end

这是从服务器报告的:

Started GET "/users/2" for 127.0.0.1 at 2012-06-24 13:00:38 +0200
Processing by UsersController#show as HTML
Parameters: {"id"=>"2"}
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = 2 LIMIT 1
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 2]]
Redirected to http://localhost:3000/
Filter chain halted as :user_authorization rendered or redirected
Completed 302 Found in 20ms (ActiveRecord: 0.8ms)

最佳答案

在你的 Controller 中:

class UsersController < ApplicationController
before_filter :validate_user, :only => :show

def show
@user = User.find(params[:id]
end


def validate_user
redirect_to courses_path unless current_user.id.to_s == params[:id]
end

end

请注意 current_user.id.to_s,因为 current_user.id 是一个整数,而 params[:id] 是一个字符串。

关于ruby-on-rails-3 - 限制用户只能使用 Devise 访问其个人资料,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11176495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com