Rails使用Devise验证用户
2013-06-20 22:35
239 查看
1.安装配置devise
在gemfile中添加一行:gem 'devise'执行bundle install后,需要安装devise到工程:
rails generate devise:install创建验证用户model,通常用user,也可以使用其他名称:
rails generate devise user rake db:migrate查看models文件夹下devise创建了user.rb文件:
devise方法来自Devise gem,其中默认启用了database_authenticatable,registerable等模块,注释部分列出了其他模块默认未启用,根据devise文档按需要使能。
attr_accessible定义的属性可以被create, update_attributes使用,未在这里定义的属性会引发这两个方法的 mass-assignment异常。
查看路由文件 routes.rb,devise gem在创建model时在路由文件中添加了:
devise_for :users执行rake routes可以看到devise创建的url:
注意devise gem提供的账户注销和用户退出登陆都是默认使用的DELETE方法,该url设计常导致编码出错,但它确是遵循了RESTful规范,留意下即可。
在需要的页面上添加注册、登陆的代码(我添加在application.html.erb中yield语句上方):
rails server启动服务器,即可查看注册登陆页面:
2.devise提供的常用method
a. authenticate_user!,验证用户是否登陆,常用于before_filterbefore_filter :authenticate_user!另,如果你创建的devise model叫admin,那么该方法就是authenticate_admin!,以下方法同理。这又是ruby玩的一个小把戏了。
b. user_signed_in?,当前是否有登陆用户
c. current_user, 获取当前登陆用户
d. user_session, 用户session,类似于session,也是一个hash表,可以用来保存用户特有的数据
e. after_sign_in_path_for和after_sign_out_path_for方法指定用户登入/登出后的跳转url.
3.自定义views
devise gem提供了足够功能的用户验证,但是由上图可见,其自带的view未免太过简单。如果需要自定义视图,就需要将devise默认的view拷贝到rails工程:
rails generate devise:views
该命令将devise的views复制到工程目录app/views下,分类为多个文件夹。修改需要的view模板就能够改变对应界面。
4.自定义controller
a.如果需要自定义controller,如Devise::SessionController:class Admins::SessionsController < Devise::SessionsController endb.在路由文件routes.rb中更新配置,告诉devise使用新的controller
devise_for :users, :controllers => { :sessions => "admins/sessions" }c.更新了controller后,在app/views/devise/sessions下的views不会再被使用,所以,还需要将这部分views复制到app/views/admins/sessions下,或者在该目录下建立新的views。
5.邮件确认
如果需要更安全一点的注册验证,可以使用邮件确认方式。首先,修改user.rb文件,启用devise的confirmable模块:
在数据表users中新加字段:
rails g migration add_confirmable_fields_to_users
新用户是以邮件的方式确认,所以,需要更改rails的环境配置。rails的环境配置位于config/environments/xxx.rb文件,xx代表develepment/test/production,三个文件的配置选项都十分类似,下面以production环境为例,打开config/environments/production.rb,在最后的end前添加:
配置邮件帐户,在production时rails建议使用邮件服务如Mandrill,这里为了简单,使用gmail帐户示例。
在改文件中继续添加smtp配置,新添加的内容最终如下:
最后,修改devise.rb文件
config.mailer_sender = "replyme@126.com"现在,当新用户new@test.com注册后,它会收到一封确认邮件,邮件from: your_gmail_username@gmail.com, to: new@test.com, reply_to: replyme@126.com,邮件包含一个链接,指向用户激活地址。用户点击该链接激活帐户后才能登陆网站。
相关文章推荐
- rails使用devise验证
- Rails自带用户验证has_secure_password的使用与源码分析
- Rails中使用邮箱验证及激活用户
- 使用Forms验证存储用户自定义信息
- 【4】 .net MVC使用Session验证用户登录
- 使用session验证的用户登录界面(简写)
- 使用AjaxPro框架实现无刷新用户登录验证【原创】
- 使用 Membership.ValidateUser(Login1.UserName, Login1.Password)验证用户
- Spring从菜鸟到高手(四)(上)使用JdbcTemplate类实现用户登陆验证、批量更新
- asp.net发送邮件,使用MD5加密解密,实现用户注册完成后发送流水号(账号)到对方邮箱,jeasyUI验证,combobox的使用完成 实例下载
- .net MVC使用Session验证用户登录(转载)
- 使用 Apache Shiro 为 web 应用程序进行用户身份验证
- Ruby on Rails: 使用devise+cancan+rolify建立完整的权限管理系统
- Android中使用webservice验证用户登录的示例
- 使用JSP标签库验证用户的输入(2)完
- Django框架下使用ajax模拟用户登录验证
- SQLSERVER误删Windows登录用户验证方式使用Windows身份验证的解决方法
- 使用SoapHeader传递和验证用户
- 使用Forms验证存储用户自定义信息