--- title: 12th 鐵人賽 Day_15 devise? tags: 12th 鐵人賽 --- # 12th 鐵人賽 Day_15 devise? 嗨!各位朋友大家好,打給後,歹嘎吼,胎尬喉,我是阿圓,一樣有請今天的one piece:  雖然前幾天跟各位講了 model 關聯性,我想了想,還是忍不住跟大家介紹 devise 這個超好用的 gem ! ## gem ? 首先先來說說什麼是 gem ,其實就是套件,用蓋棺的角度來比喻:如果你是魔獸世界的玩家,就是'插件'; 如果你是 Minecraft 的玩家,就是'模組';如果你是 跑跑卡丁車的玩家,那就是加裝的氮氣瓶,或是其他的功能。如果上面你都沒有玩的話,就是「基於遊戲之上,玩家們自己做出來讓遊戲過程更加有趣、方便的功能」。 而對於 Ruby on Rails 工程師來說,這個就叫做 gem,就是他人寫好的,讓開發過程更快速、方便的套件。 ## devise ? 而 devise 是一個被引用的次數高達八千萬,GitHub 星星數有兩萬,超級好用的 gem ! 為什麼這麼好用,想想我們之前光做一個管理者系統,要做些什麼事嗎? 1. 寫路徑 2. 建立 controller、action 3. 建立model 4. 密碼加密 5. 定義current_admin . . . 很多事情,這還是比較簡單的狀況,若今天這是一個大專案,使用者可能還要收發驗證信啦,設定密碼輸入幾次要被鎖帳號啦...,等等等;而你想得到的這些,devise 都幫你做好了!以下就讓我來跟大家介紹吧: 在==github==的內容中清楚的寫著,Devise由下方十個 modules 建成,分別對應了不同的功能: 1. Database Authenticatable: 使用者資料在寫入時會驗證 1. 所以密碼與信箱變更時,都會收到通知 2. Omniauthable:可支援第三方登入(Omniautable) use [OmniAuth] (https://github.com/omniauth/omniauth) 3. Confirmable: 發確認信和並檢查會員是否已經收過確認信 4. Recoverable:可以重新設定使用者的密碼 5. Registerable:當使用者註冊後,可以編輯或刪除他們的帳號 6. Rememberable: 自動登入(記住我功能~) 7. Trackable: 追蹤登入紀錄。 8. Timeoutable:超過時間自動登出 9. Validatable:可設定使用者的信箱與密碼需要經過驗證 10. Lockable: 當使用者登入失敗超過指定次後鎖定帳戶,可以用e-mail或在指定的時間後解鎖 使用方法: ## 安裝 將gem devise安裝好後,在終端機打下下面指令: ``` $ rails generate devise:install ``` 若有正常安裝,終端機會看到下面的訊息: (其實就是告訴你,有些東西要設定!) 用中文翻譯大概是: 1. 請去 `config/environments/development.rb`,設定mailer寄送者的預設路徑(ex: `config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }`)(可更換成自己的網址) 2. 請確定在`config/routes.rb`有設定root_path! 3. 請確定在`app/views/layouts/application.html.erb`,有下面兩行,可以印出通知: ```htmlmixed= <p class="notice"><%= notice %></p> <p class="alert"><%= alert %></p> ``` 4. (非必須)若有需要更改使用者登入、註冊的頁面,請打 ` rails g devise:views` ## 建立model 1. 在終端機: ```bash= $ rails g devise User #user是model的名稱 #跟一般建立model的方式很像: $ rails g model User ``` 2. 建立migrate後,要去migration裡把想開啟的功能的module取消註解!(若想追蹤登入次數,就要把trackle那一塊解開) ## 設定路徑 在使用者登入、變更密碼、變更信箱後預設轉址到user_root_path,可以去routes裡面做設定更改: ```ruby= get '/users' => 'users#index', as: :user_root # creates user_root_path namespace :user do root 'users#index' # creates user_root_path end ``` :::info :bulb: 如果沒有設定,會轉到root_path,所以一開始需要設定根目錄的path ::: 也可以在application裡覆寫`after_sign_in_path_for`,`after_sign_out_path_for`這兩個方法,來在轉址的時候做一點事。 可以翻翻[文件](https://bre.is/mXNJzZLk)裡提供的例子 ```ruby= def after_sign_in_path_for(resource) stored_location_for(resource) || if resource.is_a?(User) && resource.can_publish? publisher_url else super end end ``` :::success :bulb: 上面的`store_location_for`,也是Devise做好的方法,[詳細請點我](https://bre.is/rfgKZ9KF) ::: 明天來說說 devise 提供的好用 helper,感謝各位看到這邊,若有任何建議,請各位不吝指教!我們明天見!  --- #### 參考文件 [GitHub](https://github.com/heartcombo/devise/tree/f26e05c20079c9acded3c0ee16da0df435a28997) [devise 手冊](https://www.rubydoc.info/github/heartcombo/devise/master/Devise/Models/DatabaseAuthenticatable)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up