【问题标题】:Rails Authentication with has_secure_password使用 has_secure_password 进行 Rails 身份验证
【发布时间】:2012-11-24 18:26:03
【问题描述】:

如何使用 rails 3 has_secure_password 创建会话?我已经查看了http://guides.rubyonrails.org/security.html

而且没有一个是真正具体的。我必须使用会话方法吗?什么是社区标准?我不想使用 Devise/Cancan。 我只需要基于 cookie 的简单授权/身份验证。

我应该将用户对象存储在 cookie 中吗?
密码会容易受到攻击吗?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2


    【解决方案1】:

    查看 Michael Hartl 在第 8 章的教程。他很好地解释了使用 has_secured 的实现

    http://ruby.railstutorial.org/ruby-on-rails-tutorial-book

    基本上,您的用户模型中需要一个密码字段、一个密码确认字段和一个密码摘要字段。通过在模型中调用 has_secure_password,只要密码确认有效,就会生成一个 password_digest。您可以通过检查在会话控制器中登录用户:

    if user and user.authenticate(password)
      // sign_in_user
    else
      // return error message
    end
    

    在您的模型字段中还需要一个 remember_token 来识别 cookie 中的用户。 您可以在身份验证时返回 remember_token 并将其设置为 rails 中的会话函数,例如:

    user = User.find_by_email(email)
    session[:remember_token] = user.remember_token
    

    【讨论】:

    • 注意password和password_confirmation字段是变量,不会写入数据库
    • 能不能说password和password_confirmation不在模型里,只在html页面上?
    • @KevinZhao 你可以这么说。最终,模型中只存储了一个加密的密码。该视图仅用于收集构建此密码摘要所需的信息。
    【解决方案2】:

    如果您有钱可以花钱,Railscasts Pro 在第 250 集修订版中使用 has_secure_password 详细介绍了这一点,Authentication from Scratch (revised)


    还有一个稍旧的免费截屏视频版本,其中包含详细的ASCIIcast。会话部分可能对您阅读或观看有用。

    【讨论】:

    • Rails 需要更多文档来进行身份验证/授权。感觉很糟糕,我不得不观看 railscast(不是免费的,虽然它很棒)才能得到我的答案。
    猜你喜欢
    • 2015-10-03
    • 2015-10-05
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 2011-06-01
    • 2014-01-04
    • 2017-09-15
    相关资源
    最近更新 更多