刚开始做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检查更好用一些。
分享到:
相关推荐
也可以使用 Rails 自带的 has_secure_password 来自已打造。下面就是尝试使用 has_secure_password 来实现用户注册和登录功能。 准备工作 创建项目: rails new user_login has_secure_password 中加密的功能需要...
has_secure_password 目标 我们将制作一个涵盖简单身份验证流程的Rails应用程序:用户可以创建帐户,登录和注销。 介绍 我们的应用程序包含三个页面: 一个注册页面,用户在其中输入其用户名(作为name ),密码和...
has_secure_password目标我们将制作一个涵盖简单身份验证流程的Rails应用程序:用户可以创建帐户,登录和注销。介绍我们的应用程序包含三个页面: 一个注册页面,用户在其中输入其用户名(作为name ),密码和密码...
它旨在与您已经在使用的auth系统配合使用,例如Devise,Sorcery和has_secure_password 。 您还可以将其与任何自定义身份验证系统一起使用。 只需将登录请求发送到身份验证端点,Tokenable将返回一个令牌。 然后,...
$ rails generate model user name:string email:string:uniq password_digest:string 然后,运行迁移以创建users表。 $ rails db:migrate 在User模型中添加以进行密码验证。 请参阅以配置API Guard身份验证以与...
#Rails 身份验证样板验证是乏味的。... 通过has_secure_password具有合理验证和 bcrypt 密码支持的用户模型##安装生成样板用户: $ rails g model User name username password_digest email根据需要复制和
指示创建User模型并使用属性进行迁移name , String 在本实验中,我们将使用has_secure_password来配置密码。 包含该内容将带来有关管理会话等的详细信息,这会使CanCanCan难以理解。 在实际的应用程序中,您需要...
敲 Rails API的无缝JWT身份验证 描述 Knock是基于JSON Web令牌的仅Rails API应用程序的身份验证解决方案。 我为什么要用这个? 轻巧。 它是为仅Rails API的应用程序量身定制的。... 建议使用has_secure_passwo
该服务应利用has_strong_password( has_secure_password? )用户功能,以及使用请求的IP地址和规则中的CIDR值来调用或实施规则实施。创建一个登录表单并设置用户会话在/ sign-up创建一个登录表单,以供用户提交...
身份验证(使用 bcrypt 和has_secure_password ) 用户账户管理 忘记/重置密码 100% 代码覆盖率 用什么? 数据库:PostgreSQL 测试:RSpec 意见:Erb 样式表:SCSS Javascript:咖啡脚本 启动新应用 将此 repo...
拉尔斯游乐园目标熟悉... 有关要求输入密码的提示:ActiveRecord带有方便的has_secure_password属性,您可以在模型上设置该属性。 它要求您启用bcrypt gem,并向模型添加password_digest列。 您可以阅读更多有关。资源
Omniauth实验室目标识别Omniauth中的“策略” 将开发人员策略与Omniauth结合使用使用Omniauth通过第三方API在Rails服务器中提供OAuth身份验证介绍在本实验中,我们将配置Rails应用程序以请求第三方进行身份验证。...
Omniauth实验室目标识别Omniauth中的“策略” 将开发人员策略与Omniauth结合使用使用Omniauth通过第三方API在Rails服务器中提供OAuth身份验证介绍在本实验中,我们将配置Rails应用程序以请求第三方进行身份验证。...
在本实验结束时,您将能够“扩展”应用程序以创建用户帐户(可能利用您对Devise或has_secure_password )。 首先,我们将实现由Omniauth提供的称为“开发人员”的简单身份验证方案。 “开发人员”身份
Omniauth实验室目标识别Omniauth中的“策略” 将开发人员策略与Omniauth结合使用使用Omniauth通过第三方API在Rails服务器中提供OAuth身份验证介绍在本实验中,我们将配置Rails应用程序以请求第三方进行身份验证。...