Edited at

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


実現したいこと

・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


最後に

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