`
sunwenpeng
  • 浏览: 9810 次
社区版块
存档分类
最新评论

rails中登录密码使用has_secure_password

阅读更多
  刚开始做rails时,用户登录的帐号和密码都是以明文的形式直接存入数据库的。后来意识到,这样做是十分不安全的,就算是直接管理用户、管理数据库的人也不应直接看到用户的密码,而且在客户端和服务器传输用户信息的时候也不安全。所以就要给这个用户的密码加密。
  rails框架本身就提供了一个加密的方式,在gemfile中提供了一个gem包:
# Use ActiveModel has_secure_password
gem 'bcrypt-ruby', '~> 3.1.2'

  然后在终端中执行bundle install的命令,应该就可以使用了。但我在使用的过程中遇到了一个问题:
  gemfile引好文件,安装好gem包后,在相应的user的model中加入:
class User < ActiveRecord::Base
   has_secure_password
end

  这时,has_secure_password有下划线,提示是undefined method,我的第一反映是gem没安装正确,用gem list查看却是安装成功了。
  最后查看了rails使用的ruby版本是2.0.0,在gemfile中也写入了,而在rubymine的设置中ruby SDK and Gems 中设置的ruby版本却是RVM ruby—1.9.3-P448 。这就导致了虽然在rails工程中下载了相应的bundle,下载下来的gem却没有使用到工程中,修改rubymine的SDK设置后,下划线就消失了。
  这时提供了的密码保护功能,默认用户的密码属性是password_digest,这是加密后的密码,在新增和修改用户密码时默认密码的两个关键key是password和password_confirmation,当这两个值相等的时候才会真正改变用户密码,否则框架中提供了自动的相应的报错信息。报错信息是英文的,需要几行代码来完成汉化。
  在登录和查找用户密码的时候使用:
  user.authenticate(params[:password])来验证密码。
  还有就是给每个用户产生一个token,大多用的是md5的方式。
  控制登录时输入的内容合法性(格式问题),使用:
 
validates :name, :presence => true, :uniqueness => {:case_sensitive => false}
  validates :email, :presence => true, :uniqueness => {:case_sensitive => false}, :email_format => true
  validates :password, :length => { :minimum => 6 }, :on => :create

  如果上面某一项填写有误,会出现error,可以使用@user.error.any?来判断。
  但是我觉得bootstrap中提供的表格css检查更好用一些。
分享到:
评论

相关推荐

    Ruby on Rails实现最基本的用户注册和登录功能的教程

    也可以使用 Rails 自带的 has_secure_password 来自已打造。下面就是尝试使用 has_secure_password 来实现用户注册和登录功能。 准备工作 创建项目: rails new user_login has_secure_password 中加密的功能需要...

    has_secure_password_lab-v-000

    has_secure_password 目标 我们将制作一个涵盖简单身份验证流程的Rails应用程序:用户可以创建帐户,登录和注销。 介绍 我们的应用程序包含三个页面: 一个注册页面,用户在其中输入其用户名(作为name ),密码和...

    has_secure_password_lab-onl01-seng-pt-032320

    has_secure_password目标我们将制作一个涵盖简单身份验证流程的Rails应用程序:用户可以创建帐户,登录和注销。介绍我们的应用程序包含三个页面: 一个注册页面,用户在其中输入其用户名(作为name ),密码和密码...

    tokenable-ruby:Tokenable是Rails的瑰宝,它允许纯API应用程序对用户进行身份验证。 在构建单页应用程序或移动应用程序时,这将很有帮助。 与Devise,Sorcery,has_secure_password以及您可能要使用的任何其他身份验证系统一起使用

    它旨在与您已经在使用的auth系统配合使用,例如Devise,Sorcery和has_secure_password 。 您还可以将其与任何自定义身份验证系统一起使用。 只需将登录请求发送到身份验证端点,Tokenable将返回一个令牌。 然后,...

    api_guard:用于Rails API的JWT身份验证解决方案

    $ rails generate model user name:string email:string:uniq password_digest:string 然后,运行迁移以创建users表。 $ rails db:migrate 在User模型中添加以进行密码验证。 请参阅以配置API Guard身份验证以与...

    auth_boilerplate:使用 Rails 4 和 Bcrypt 进行样板认证

    #Rails 身份验证样板验证是乏味的。... 通过has_secure_password具有合理验证和 bcrypt 密码支持的用户模型##安装生成样板用户: $ rails g model User name username password_digest email根据需要复制和

    cancan_lab-v-000

    指示创建User模型并使用属性进行迁移name , String 在本实验中,我们将使用has_secure_password来配置密码。 包含该内容将带来有关管理会话等的详细信息,这会使CanCanCan难以理解。 在实际的应用程序中,您需要...

    敲:Rails API的无缝JWT身份验证

    敲 Rails API的无缝JWT身份验证 描述 Knock是基于JSON Web令牌的仅Rails API应用程序的身份验证解决方案。 我为什么要用这个? 轻巧。 它是为仅Rails API的应用程序量身定制的。... 建议使用has_secure_passwo

    LoginTest:从Rails开始旅程

    该服务应利用has_strong_password( has_secure_password? )用户功能,以及使用请求的IP地址和规则中的CIDR值来调用或实施规则实施。创建一个登录表单并设置用户会话在/ sign-up创建一个登录表单,以供用户提交...

    beaker-rails:一个专注于安全性和 100% 测试覆盖率的准系统 Rails 4.1 入门应用程序

    身份验证(使用 bcrypt 和has_secure_password ) 用户账户管理 忘记/重置密码 100% 代码覆盖率 用什么? 数据库:PostgreSQL 测试:RSpec 意见:Erb 样式表:SCSS Javascript:咖啡脚本 启动新应用 将此 repo...

    rails-amusement-park-v-000

    拉尔斯游乐园目标熟悉... 有关要求输入密码的提示:ActiveRecord带有方便的has_secure_password属性,您可以在模型上设置该属性。 它要求您启用bcrypt gem,并向模型添加password_digest列。 您可以阅读更多有关。资源

    omn​​iauth_lab-v-000

    Omniauth实验室目标识别Omniauth中的“策略” 将开发人员策略与Omniauth结合使用使用Omniauth通过第三方API在Rails服务器中提供OAuth身份验证介绍在本实验中,我们将配置Rails应用程序以请求第三方进行身份验证。...

    omniauth_lab-onl01-seng-ft-050420

    Omniauth实验室目标识别Omniauth中的“策略” 将开发人员策略与Omniauth结合使用使用Omniauth通过第三方API在Rails服务器中提供OAuth身份验证介绍在本实验中,我们将配置Rails应用程序以请求第三方进行身份验证。...

    omniauth_lab-den01-seng-ft-091420

    在本实验结束时,您将能够“扩展”应用程序以创建用户帐户(可能利用您对Devise或has_secure_password )。 首先,我们将实现由Omniauth提供的称为“开发人员”的简单身份验证方案。 “开发人员”身份

    omniauth_lab-wdc01-seng-ft-071320

    Omniauth实验室目标识别Omniauth中的“策略” 将开发人员策略与Omniauth结合使用使用Omniauth通过第三方API在Rails服务器中提供OAuth身份验证介绍在本实验中,我们将配置Rails应用程序以请求第三方进行身份验证。...

Global site tag (gtag.js) - Google Analytics