# Rails_devise基本使用教學 ###### tags: `rails`, `ruby` 環境: > ruby 2.6.7 > > Rails 6.1.3.1 > > Ubuntu 20.04 LTS 資源連結: [**官方網站**](https://github.com/heartcombo/devise) ## :memo: ### Step 1: 移至專案裡的Gemfile安裝devise [**ruby_gem_devise**](https://rubygems.org/gems/devise/versions/4.2.0?locale=zh-TW) ```ruby= # 專案路徑/Rails_app/Gemfile gem 'devise', '~> 4.2' # 移動至Ubuntu使用gem導入至專案, 並安裝devise $ bundle $ rails generate devise:install # ``` 輸入完`rails generate devise:install`並執行後會出現以下畫面: ![](https://i.imgur.com/PjfkPob.jpg) ### Step 2: Rails專案,建立devise_model ```ruby= # 移動至Ubuntu,建立MODEL, $ rails g devise User # (自訂名(MODEL)) $ rails db:migrate ``` ### Step 3: 客制化登入頁面(view) ```ruby= # 移動至Ubuntu $ rails generate devise:views ``` 輸入完`bundle`並執行後會出現以下畫面: ![](https://i.imgur.com/rrG5vmZ.jpg) ### Step 4.1: 為devise新增欄位 ```ruby= # 移動至Ubuntu $ rails g migration add_columns_to_users username:uniq intro:text ``` 移動至/appname/db/migrate再確認: ```ruby= # /appname/db/migrate/20210503065200_add_columns_to_users.rb class AddColumnsToUsers < ActiveRecord::Migration[6.1] def change add_column :users, :username, :string add_index :users, :username, unique: true add_column :users, :intro, :text end end ``` ```ruby= # 移動至Ubuntu $ rails db:migrate ``` ### Step 4.2: 建立devise controllers ```ruby= # 移動至Ubuntu $ rails g devise:controllers (自訂名)users ``` :::info :bulb: **Hint:** 會在 **/appname/app/controllers/users** 生成相關controllers檔案 ::: **移動至routes.rb增加準備要客制化controllers的檔案讓dvise讀取** ```ruby= # /appname/config/routes.rb devise_for :users, controllers: { registrations: 'users/registrations' } ``` **移動至registrations_controller.rb增加剛剛新增的欄位** ```ruby= # 路徑:/appname/app/controllers/users/registrations_controller.rb before_action :configure_account_update_params, only: [:update] private def configure_account_update_params devise_parameter_sanitizer.permit(:account_update, keys: [:username, :intro]) end ``` ### Step 5: 常用指令(helpers) :::info :bulb: **Hint:** 再生成MODEL時,下面會以(自訂名)變動。 例如: `rails g devise User`來生成的話、則下方都會以<font color="red">**_user**</font>開頭。 ::: ```ruby= # 檢測使用者是否登入 user_signed_in? # 目前登入中的使用者 current_user # 在此頁面(controller),需要先登入 before_action :authenticate_user! ```