Sorceryで作るユーザー機能をカスタマイズ

1pt   2018-10-12 09:43
IT技術情報局

実現したいこと

・sorceryで作成したユーザー機能をカスタマイズする
・emailカラムを削除しnameカラムを追加する

実現のためしたこと

・テーブル、モデルを一から作り直した。
・ログイン設定を修正した
・そのほかのコードの修正

テーブル・モデルの作り直し(ターミナルで)

1.モデルの削除

$ rails destroy model モデル名

2.マイグレーションファイルの作成

$ rails g migration ファイル名(任意)

3.マイグレーションファイルに追記

def change drop_table :削除するテーブル名 end $ rake db:migrate

4.再インストール

$rails g sorcery:install $rake db:migrate $rails g scaffold user name:string crypted_password:string salt:string --migration false ログイン設定の修正 /config/initializers/sorcery.rb # --- user config --- config.user_config do |user| # -- core -- # specify username attributes, for example: [:username, :email]. # Default: `[:email]`  # user.username_attribute_names = [:name] ←ここを追記

デフォルトの状態ではログインの際にemailが求められるようになっている。だから、emailからnameに書き換えてやる。

また、「ログインの際にメールアドレスでも名前でもよい」とするときは下記のように複数指定してやれば良い。

user.username_attribute_names = [:email, :name] そのほかのコードの修正 app/controllers/users_controller.rb def user_params params.require(:user).permit(:name, :password, :password_confirmation) end app/models/user.rb class User < ApplicationRecord authenticates_with_sorcery! validates :password, length: { minimum: 3 }, if: -> { new_record? || changes[:crypted_password] } validates :password, confirmation: true, if: -> { new_record? || changes[:crypted_password] } validates :password_confirmation, presence: true, if: -> { new_record? || changes[:crypted_password] } validates :name, uniqueness: true end

その他、フォームなどのHTMLファイルの修正をする必要がある。

参考

https://github.com/Sorcery/sorcery/wiki/Simple-Password-Authentication
http://hyperneetprogrammer.hatenablog.com/entry/login-with-sorcery-by-username-or-email
https://dev.classmethod.jp/server-side/ruby-on-rails/ruby-on-rails_sorcery_auth_no2/
https://qiita.com/Kuragasaki/items/7d98cf29341611fb189a

最後に

テーブルとモデルの削除・作り直しに関しては、もっといい方法があるのかもしれないです。

Source: rails tag

   ITアンテナトップページへ
情報処理/ITの話題が沢山。