Cheat Sheet速查表
跳转到主要内容

Devise 速查表

本文根据 Devhints / Devise 翻译。代码示例及版本范围沿用原文。

关于

Devise 是一个灵活的身份验证 Gem(Ruby 库)。

安装

Rails 3:将以下内容添加到您的 Gemfile 中

gem "devise"
gem "hpricot"
gem "ruby_parser"

在您的项目中安装 Devise

$ rails generate devise:install

为您的模型生成 Devise 配置

$ rails generate devise MODEL
$ rake db:migrate

(可选)生成 Devise 视图

$ rails generate devise:views

辅助方法 (Helpers)

user_signed_in?
current_user
user_session
destroy_user_session_path (Logout)
new_user_session_path (Login)
edit_user_registration_path (Edit registration)
new_user_registration_path (Register new user)

控制器相关内容

before_filter :authenticate_user!

模型

模型选项

class User < ActiveRecord::Base
  devise :database_authenticatable,
    :registerable,
    :confirmable,
    :recoverable,
    :rememberable,
    :trackable,
    :validatable
end

数据库迁移辅助方法

create_table :users do |t|
  t.database_authenticatable
  t.confirmable
  t.recoverable
  t.rememberable
  t.trackable
  t.timestamps
end

路由

已认证与未认证路由

unauthenticated do
   root :to => 'home#index'
end

authenticated do
  root :to => 'dashboard#index'
end

As(别名/命名)

as :user do
  get 'sign_in', :to => 'devise/sessions#new'
end

`devise_for` 的“魔法”机制

devise_for :users

    # Session routes for Authenticatable (default)
         new_user_session GET  /users/sign_in                    {:controller=>"devise/sessions", :action=>"new"}
             user_session POST /users/sign_in                    {:controller=>"devise/sessions", :action=>"create"}
     destroy_user_session GET  /users/sign_out                   {:controller=>"devise/sessions", :action=>"destroy"}

    # Password routes for Recoverable, if User model has :recoverable configured
        new_user_password GET  /users/password/new(.:format)     {:controller=>"devise/passwords", :action=>"new"}
       edit_user_password GET  /users/password/edit(.:format)    {:controller=>"devise/passwords", :action=>"edit"}
            user_password PUT  /users/password(.:format)         {:controller=>"devise/passwords", :action=>"update"}
                          POST /users/password(.:format)         {:controller=>"devise/passwords", :action=>"create"}

    # Confirmation routes for Confirmable, if User model has :confirmable configured
    new_user_confirmation GET  /users/confirmation/new(.:format) {:controller=>"devise/confirmations", :action=>"new"}
        user_confirmation GET  /users/confirmation(.:format)     {:controller=>"devise/confirmations", :action=>"show"}
                          POST /users/confirmation(.:format)     {:controller=>"devise/confirmations", :action=>"create"}

自定义 `devise_for`

devise_for :users,
  :path => "usuarios",
  :path_names => {
    :sign_in => 'login',
    :sign_out => 'logout',
    :password => 'secret',
    :confirmation => 'verification',
    :unlock => 'unblock',
    :registration => 'register',
    :sign_up => 'cmon_let_me_in' }

测试辅助方法

测试辅助方法

include Devise::TestHelpers

sign_in @user
sign_out @user

参见: https://github.com/plataformatec/devise/blob/1094ba65aac1d37713f2cba71f9edad76b5ca274/lib/devise/test_helpers.rb