Rails使用Devise驗證用戶

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_filter

before_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
end
    b.在路由文件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 = "[email protected]" 
     現在,當新用戶[email protected]註冊後,它會收到一封確認郵件,郵件from: [email protected], to: [email protected], reply_to: [email protected],郵件包含一個鏈接,指向用戶激活地址。用戶點擊該鏈接激活帳戶後才能登陸網站。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章