设计和用户配置文件

时间:2012-05-31 10:43:51

标签: ruby-on-rails-3 devise

我已经设置了一个测试应用程序,并设置了设置来处理身份验证,另外我已经设置了一个组件,在注册后将它们发送到创建配置文件页面,效果很好。

我遇到的问题是当登录用户编辑他们的个人资料时,很容易更改查询字符串并访问其他用户数据 -

http://localhost:3000/profiles/1/edit

我的问题是如何将其锁定到当前用户,以便只能编辑他们的数据?

罗比

2 个答案:

答案 0 :(得分:1)

我会选择before_filter

# in profiles controller
class ProfilesController < ApplicationController

  before_filter :find_profile
  before_filter :check_if_authorized 

  def find_profile
    @profile = Profile.find(params[:id])
  end

  def check_if_authorized
    render :status => 404 and return unless current_user == @profile.user
  end

end

假设:

  • 设计模型名为User
  • 用户有一个个人资料
  • 您已经在检查用户是否已登录

答案 1 :(得分:1)

您可以将令牌身份验证与会话一起使用,以实现更精确和安全的身份验证。

将devise:token_authenticatable添加到模型User 这将在每次创建用户时在users表的字段authentication_token字段中创建身份验证令牌。

然后去找一个before_filter:verify_auth_token

def verify_auth_token
  if current_user.authentication_token == params[:auth_token]
   return true 
  else
   return false
  end
end

编辑请求也应该是http:/// profiles / 1 / edit?auth_token = 12wqaasaeaad