Kamigo 搭配 Devise 實作會員功能
簡介
前陣子在做實作台科不分系學姊時,發現需要會員機制,但假如直接開一個表單要使用者註冊似乎又有點太麻煩, 因為最終傳到 Server 的每一條訊息都已經帶有使用者資訊,於是和卡米哥討論該怎麼做,沒想到他早就已經做過了,而且還結合了 Devise,十分的方便,真是偉哉偉哉卡米哥。
前提提要
此篇文的前提是使用 Rails 的 Kamigo 框架進行 Line Chatbot 開發,如果還不知道如何使用 Kamigo 可以查看前方的連結,參考該 Repo 的 README.md 進行實作。
操作步驟
- 安裝相關 Gem
- 生成 User Model
- 設定 Devise
- 認證 User
安裝相關 Gem
在 Gemfile 中加入以下內容:
gem 'devise'
bundle install
生成 User Model
請執行以下指令:
rails g devise:install
rails g devise user
rails g migration add_line_login
add_column :users, :line_id, :string
add_column :users, :name, :string
add_column :users, :image_url, :string
rails g migration resolve_users_email_unique
def up
change_column :users, :email, :string, null: true, default: nil
end
def down
change_column_null :users, :email, false, SecureRandom.uuid
end
rails db:migrate
設定 Devise
由於 User 使用 line_id 進行區分,因此 email 和 password 為非必填,在 app/models/user.rb 加入以下內容:
def email_required?
false
end
def password_required?
false
end
認證 User
在 app/controllers/application_controller.rb 加入以下內容:
include Rails.application.routes.url_helpers
before_action :line_messaging_login
def line_messaging_login
user = User.from_kamigo(params)
sign_in user if user.present?
end
# params[:source_user_id]
# params[:profile][:displayName]
def self.from_kamigo(params)
if params[:profile].present? && params[:source_user_id].present?
line_id = params.dig(:source_user_id)
name = params.dig(:profile, :displayName)
user = User.find_or_create_by(line_id: line_id)
user.update(name: name)
user
end
end
結語
會員功能就是這麼簡單就做好了,當然這都要歸功於 Kamigo 框架本身就寫得與 Rails 息息相關,目前來說雖然已經完成在 Line Chatbot 中確認使用者,但假如使用者開啟網頁就沒辦法確認了,因此下一篇會介紹使用 Line Login 擴充此會員功能。