维基百科上有how to 的不少文章。git
Stackoverflow有大量问题的答案。github
全的文档devise:APIruby
7-20新增:cookie
warden:https://github.com/wardencommunity/warden/wiki/overviewsession
warden是一个devise依赖的框架。env["warden"]是一个环境对象,用于验证app
见最下:框架
devise使用介绍:ide
一个Rails基于warden的灵活的验证解决方案模块化
由10个单独的module组成:测试
安装:
Controller filters and helpers
Devise定义了一些helper方法用在controllers和views中。
* 创建一个controller并进行用户验证,须要加上:
before_action :authenticate_user!
⚠️, user是_your model name
* 肯定用户是否登录
user_signed_in?
* 当前登录用户
current_user
* use_session 可以存取session。
* 须要创建根路径 root , 由于Devise须要根路径redirect to
Configuring Models (有很多例子具体看操做手册。)
model中的Devise方法接受一些options来配置modules。
User model里面默认有一些Devise模块:
:recoverable, :rememberable, :trackable, :validatable
还有一些被注释掉的是能够选择的。
这些符号传给devise method可以使用Devise的功能features和假定了一系列的数据列columns,具体的list能够在migration file文件中看到。如(部分):
Strong Parameters(高级的自定义设置)、
当客制化views的时候,你须要增长新的属性给forms。
有三个action能够在controller中使用:
There are just three actions in Devise that allow any set of parameters to be passed down to the model, therefore requiring sanitization.
Their names and default permitted parameters are:
在controller有三个动做注册,登入,帐号更新, Devise容许你设置任何参数,而后传给model, 这称为sanitization。
若是你想要容许额外的参数(懒惰方法),可使用before_action方法在ApplcationController:
class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:username]) end end
具体其余详细设置见,文档git...
Configuring views
后期客制化views, views打包在gem中,须要复制。
rails generate devise:views
包括confirmations, mailer, passwords, registrations, sessions, shared, unlocks文件
所以能够选择生成部分视图:
rails generate devise:views -v registrations confirmations
若是Devise有多个,User and Admin, Devise会用相同的views,但咱们能够客制化views。
rails generate devise:views users
Configuring controllers
若是客制化视图不够,还能够客制化controller
第一步: rails g devise:controllers [scope]
若是使用users做为scope,控制器建立app/controllers/users/.
另外;使用-c能够指定一个controller。(相似views -v)如:
rails generate devise:controllers users -c=sessions
总共6个控制器:confirmations_controller, omniauth_callbacks_controller, passwords_controller, registrations_controller, sessions_controller, unlocks_controller.
第二步:在router.rb中使用这个controller
devise_for :users, controllers: {sessions: 'users/sessions' }
第三步:复制视图,从devise/sessions到users/sessions. 由于controller变了,默认的视图也须要重新定位。
第四步:最终,改变或扩展想要的controller actions.
Configuring routes(详细的文档:devise_for)
Devise也支持客制化路径。能够经过devise_for方法,它接受options如
class_name ,controllers大量自定义的配置。
Test
Devise includes some test helpers for controller and integration tests.
In order to use them, you need to include the respective module in your test cases/specs.
在spec目录内存放下面的代码,习惯是spec/support/devise.rb中,或者直接在rails_helper.rb/spec_helper.rb也行。
config.include Devise::Test::IntegrationHelper, type: :feature
#应该能够不写具体类型
sign_in @user sign_in @user, scope: :admin
用于集成测试的方法:
sign_in users(:bob) sign_in users(:bob), scope: :admin sign_out :user
能够配置多个Devise model,用于不一样的目的。好比只想要一个数据验证和计时timeout的功能的model.就能够这么设计:
# Create a migration with the required fields create_table :admins do |t| t.string :email t.string :encrypted_password t.timestamps null: false end # Inside your Admin model devise :database_authenticatable, :timeoutable # Inside your routes devise_for :admins # Inside your protected controller before_action :authenticate_admin! # Inside your controllers and views admin_signed_in? current_admin admin_session
wardon
warden是一个devise依赖的框架。env["warden"]是一个环境对象,用于验证
具体可看git,rubyChina上有相关帖子。
env['warden'].authenticate(:password) env['warden'].user # the user object