我有一个巫术的Rails应用程序
一切正常。
问题是在编辑用户时,例如:
HTTP://本地主机:3000 /用户/ 1 /编辑
它的工作正常,但当我将用户ID更改为2或3 ..
我可以更新所有用户数据
仅当当前用户是登录用户时,我才能限制编辑页面

这是我的控制器:

skip_before_action :require_login, only: [:new, :create, :show]

def new
 @user = User.new
end

def create
@user = User.new(user_params)
if @user.save
  auto_login(@user)
  flash[:info] = "Welcome."
  redirect_to root_url
else
  render 'new'
end
end

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

def update
@user = User.find(params[:id])
if @user.update_attributes(user_params)
  flash[:success] = "Profile updated"
  redirect_to @user
else
  render 'edit'
end
end

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

private

def user_params
 params.require(:user).permit(:email, :password, :password_confirmation)
end  

===============>>#1 票数:1 已采纳

你也可以做这样的事情

before_action :edit_rights?, only: [:update, :edit]

private
def edit_rights?
  @user = User.find(params[:id])
  redirect_to(root_path) unless current_user == @user
end

您在updateedit操作中都不需要@user = User.find(params[:id])

===============>>#2 票数:0

有(至少)两种方法可以做到这一点。 另一个答案详细介绍了第一个简单明了的步骤,请对您的控制器进行微调。

一种不太明显的方法是创建单个资源及其自己的控制器。 在可能如下所示的路线中:

resource :profile, only: [:show, :edit, :update]
# generates:
# /profile (GET, PATCH, PUT)
# /profile/edit (GET)

然后创建一个仅对用户自己的配置文件负责并且仅对current_user起作用的控制器。

是的,如果您的模型在应用程序的不同部分的行为确实有所不同,则一个模型具有多个控制器是可以的。

为什么要这么做?

  • 用户自己的个人资料可能会显示比公开信息更多的信息,您可以在单独的视图中进行布局
  • 没有“访问被拒绝”错误,因为通过current_user自动选择了资源,您所需current_user就是确保用户已登录到整个控制器中。

  ask by anouar translate from so

未解决问题?本站智能推荐:

1回复

用魔术注销所有用户

我需要注销使用巫术的Rails应用程序中的所有用户。 我尝试在Rails控制台中运行以下代码,但它说注销未定义。
2回复

带有魔术的Facebook OAuth无法将电子邮件保存到数据库

无法通过facebook oauth将新用户保存到我的数据库中,因为我已将电子邮件设置为null:false,并且它在尝试进行身份验证时不会抓取电子邮件。 不想更改我的数据库作为解决方法。 config.facebook.key = ENV['facebook_app_id'] conf
1回复

Rails魔术宝石间歇性未定义方法异常

我正在使用Sorcery宝石(0.8.6版)在Rails 4.0.4应用程序中对Company记录进行身份验证。 身份验证流程运行良好,但是在尝试使用Sorcery的子模块- :reset_password和:user_activation 。 在Company记录( @company
1回复

在rspec NoMethodError中使用魔术:未定义的方法“ authenticates_with_sorcery!”

大家好,我正在尝试测试必须在其中进行用户身份验证的控制器,但是我不断收到NoMethodError: undefined method `authenticates_with_sorcery!' 即使控制器本身也可以工作并且用户模型也可以。 所以基本上:如果我在服务器上执行该操作,则在运行r
1回复

用魔术重置密码可进行不匹配的确认

我正在按照魔术教程进行密码重置。 我发现该代码有效,即使我的密码确认不一样。 我的用户模型具有attr_accessor :password, :password_confirmation 。 相关代码来自app/controllers/password_resets_controll
2回复

当我使用魔术宝石时,在UsersController#create中的ActiveRecord :: StatementInvalid

我跟踪了railscasts中有关魔术的所有内容,但是当我尝试创建用户时,它给了我这个错误 请帮助我解决这个问题,请去看看我的github: https : //github.com/simpsonness/test_app 谢谢~~~
1回复

通过RubyCAS使用单个访问令牌访问Rails API

我目前正在为Web应用程序设计和原型设计,该应用程序包括三个部分,一个由Rails应用程序提供的Restful API(JSON,XML)接口,另一个Rails应用程序支持的Backbone.js应用程序,以及一个Android。通过API访问数据的应用程序。 对于Backbone.js应
1回复

向登录的用户显示特定信息

我正在为我们的客户创建一个客户服务Web应用程序,使他们可以在登录后提交新的客户服务票证。我有一个使用魔法宝石创建的登录系统,并且我对其进行了修改,以接受其他字段:client码。 我们正在分配客户代码,以帮助防止未经授权的用户创建帐户。 登录后,它要求提供如下信息: 名称:
1回复

Ruby on Rails,停用用户

我正在使用巫术宝石进行用户身份验证。 我的模型是: 我在互联网上找不到是否有用于停用用户的内置功能。 找到用户并仅将参数activation_state更改为inactive会安全吗?
1回复

如何从巫术应用用户属性中删除用户名

我在rails应用程序上使用巫术进行身份验证,我想知道如何从用户模型中删除用户名。 我成功使用电子邮件地址登录,但我仍然在数据库username: nil中的每个用户上看到这个username: nil 我怎么摆脱它? 迁移应该是什么样的?