运行环境: rails 4.0.0
ruby2.0.0
sqlite3
活动通中的User模型中,原本用户密码是没有加密的,重构时给密码进行了加密处理。用哈希函数 bcrypt 对密码进行了不可逆的加密,得到密码的哈希值存入数据库中。在程序中使用 bcrypt,需要把 bcrypt-ruby 这个 gem 加入 Gemfile
即把gemfile中的对应注释去掉即可,如下:
之后运行:
加密过程只需调用一个方法,这个方法是 has_secure_password,password 和 password_confirmation 属性的存在性验证以及二者要相等都在 has_secure_password 方法中实现了,只要数据库中有 password_digest 列,在模型文件中加入 has_secure_password 方法后就能验证用户身份了
加密后,在数据库中验证用户信息时,要调用authenticate 方法,authenticate 方法的作用是对比加密后的密码和 password_digest 是否一致,如果提交的数据不合法,authenticate 方法会返回 false。
代码如下:
if @user && @user.authenticate(...)可能出现的结果:
使用 &&(逻辑与)检测获取的用户是否合法。因为除了 nil 和 false 之外的所有对象都被视作 true,上面这个语句可能出现的结果如下所示。即当且仅当数据库中存在提交的用户名并提交了对应的密码时,这个语句才会返回 true。
ruby2.0.0
sqlite3
活动通中的User模型中,原本用户密码是没有加密的,重构时给密码进行了加密处理。用哈希函数 bcrypt 对密码进行了不可逆的加密,得到密码的哈希值存入数据库中。在程序中使用 bcrypt,需要把 bcrypt-ruby 这个 gem 加入 Gemfile
即把gemfile中的对应注释去掉即可,如下:
# Use ActiveModel has_secure_password gem 'bcrypt-ruby', '~> 3.0.0'
之后运行:
bundle install
加密过程只需调用一个方法,这个方法是 has_secure_password,password 和 password_confirmation 属性的存在性验证以及二者要相等都在 has_secure_password 方法中实现了,只要数据库中有 password_digest 列,在模型文件中加入 has_secure_password 方法后就能验证用户身份了
class User < ActiveRecord::Base has_secure_password end
加密后,在数据库中验证用户信息时,要调用authenticate 方法,authenticate 方法的作用是对比加密后的密码和 password_digest 是否一致,如果提交的数据不合法,authenticate 方法会返回 false。
代码如下:
def create @user = User.find_by(name: params[:session][:name]) if @user && @user.authenticate(params[:session][:password]) sign_in(@user) else flash.now[:notice]= '用户名或者密码不正确' render '/sessions/login' end end
if @user && @user.authenticate(...)可能出现的结果:
用户 密码 a && b 不存在 任意值 nil && [anything] => false 存在 错误的密码 true && false => false 存在 正确的密码 true && true => true
使用 &&(逻辑与)检测获取的用户是否合法。因为除了 nil 和 false 之外的所有对象都被视作 true,上面这个语句可能出现的结果如下所示。即当且仅当数据库中存在提交的用户名并提交了对应的密码时,这个语句才会返回 true。
发表评论
-
rails download files by post request
2016-07-04 14:34 418刚做了一个下载文件,用的是get请求 1.先说用get请 ... -
ruby中类的层级关系
2014-09-03 23:02 653所有的类最终继承于Object,Object本身又继承于 ... -
ruby中的对象包含什么
2014-09-02 22:21 501class MyClass def my_metho ... -
activerecord 中查询created_at在一定时间段内
2014-08-20 22:07 780今天遇到一个问题,需要取出数据库中本月的一些记录。 查了 ... -
guanzhuweobo
2014-01-17 17:10 0为了得到一个由所有被关注用户组成的 followed_user ... -
weibiweibi
2014-01-16 15:31 810.1.3 用户和微博之间的关联 在为 Web 程序构建数 ... -
管理员权限
2014-01-16 14:16 0我们要通过 User 模型中一个名为 admin 的属性来判断 ... -
利用faker创建示例用户
2014-01-16 13:51 0之前做过一个ruby_on_rails的教程,其中实现用户管理 ... -
转向用户真正相撞向的页面
2014-01-16 11:15 0要转向用户真正想访问的页面,我们要在某个地方存储这个页面的地址 ... -
添加头像
2014-01-15 15:01 0首先,我们要在用户资料页面中添加一个“全球通用识别”的头像,这 ... -
唯一性验证
2014-01-15 12:55 0为 email 列建立索引就要改变数据库模型,在 Rails ... -
用image_tag添加图片
2014-01-14 17:25 0在rails工程中添加图片: = link_to image_ ... -
ruby 中的处理数组函数与Hash
2014-01-15 09:37 678>> "foo bar baz ... -
定义 full_title 帮助方法
2013-12-31 10:08 0module ApplicationHelper # ... -
对数据操作的一些函数
2013-12-30 15:17 0Model.take检索的记录,没 ... -
rails中用validates进行合法性验证
2013-12-28 19:33 2059活动通中注册信息的验 ... -
rails的三种生产环境
2013-12-28 18:29 969Rails 定义了三个环境,分别是“生产环境”、“开发环境”和 ... -
rails中路由的配置
2013-12-24 18:18 01.典型路由: match '/:controller' m ... -
render与redirect_to页面显示
2013-12-28 18:21 4821.redirect_to要向服务器重新发送请求,示例代码如下 ... -
rails中用link_to用法
2013-12-22 16:17 2525rails中的link_to就相当于h ...
相关推荐
在 Rails 实现用户注册和登录功能是非常...has_secure_password 中加密的功能需要用到 bcrypt ,所以需要在项目中启用 bcrypt gem 包。进入项目目录,修改 Gemfile 文件如下内容: # Use ActiveModel has_secure_pas
API防护 基于的身份验证解决方案,针对基于Rails的API进行令牌刷新... 请参阅以配置API Guard身份验证以与Devise一起使用,而不是使用has_secure_password 。 class User < ApplicationRecord has_secure_passworde
在用户模型中,使用`has_secure_password`方法来启用BCrypt密码验证: ```ruby class User has_secure_password end ``` 在视图(Views)中,创建注册和登录的HTML表单。使用ERB语法,将表单绑定到控制器的动作...
了解Active Record的has_secure_password方法。 注册并使用安全的加密密码登录用户。 概述 保护用户数据是Web开发人员最重要的工作之一。尽管经常警告它,但您的许多用户仍会在许多不同的网站上使用相同的用户名和...
了解Active Record的has_secure_password方法。 注册并使用安全的加密密码登录用户。 概述 保护用户数据是Web开发人员最重要的工作之一。 尽管经常警告它,但您的许多用户仍会在许多不同的网站上使用相同的用户名...
2. **密码加密**:为了安全存储用户的密码,通常会使用 bcrypt 或其他加密库对密码进行哈希处理。在 User 模型中,你会看到类似 `has_secure_password` 的方法,它包含了验证和哈希密码的功能。 3. **控制器与路由*...
- 认证机制:介绍了如何使用Rails内置的`has_secure_password`模块来处理用户密码的存储与验证,以及如何利用`bcrypt`库进行密码哈希。 - 授权策略:讲解了如何使用`Pundit`或`CanCanCan`等库来实现基于角色的访问...
Rails 自带的 `has_secure_password` 方法可以用于处理密码的哈希和验证。 2. **控制器(Controller)**:登录过程涉及的控制器可能有`SessionsController`,负责处理登录请求、登出请求。例如,`create`动作处理...
`has_secure_password`是`ActiveModel::SecurePassword`模块提供的方法,用于处理密码的哈希和验证。 7. **会话管理(Session Management)** Rails内置的会话存储机制用于在用户登录后跟踪其状态。登录成功后,用户...