維基百科上有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