転職するに当たってポートフォリオを作った。採用の人に見てもらう為にはなるだけストレスなくアプリの機能が見れるようにしておくべきである。そこでボタン一つでログインができる機能を実装したので共有したいと思います。
前提として、通常のログインなどのアカウントのロジックにはsorceryというgemを使っているものとして説明していきます。
結論から書くと以下のコードで簡単ログインが実装できます。
def create
# 引数の条件に該当するデータがあればそれを返すfind_by(attributes)、なければ新規作成create(attributes, &block)
@user = User.find_or_create_by(email: 'guest@example.com') do |user|
# パスワードをランダムで生成する。GithubbにソースコードをあげるときにPWの漏洩が防げる。
user.password = SecureRandom.urlsafe_base64
# 作成したユーザーの名前
user.user_name = "ゲストユーザー"
end
# ログインさせる
auto_login(@user)
redirect_to todo_tasks_path(@user), notice: 'ゲストユーザーでログインしました'
end
ログイン機能を実装してるのでuser_sessionn_controller.rbとかもあるかと思いますので、そっちに書いてもよかったんですがどっかで一つの場所に処理を書きすぎるのはダメだぞぉって言ってたなと思ってゲストログイン用のコントローラーを作りました。
rails g controllerってやつでパパッとね。
あとはルーティングとビューを設定してやれば実装完了です、簡単ですね。
# 簡単ログイン
resources :guestuser_sessions , only: :create
= link_to 'かんたんログイン', guestuser_sessions_path, method: :post,class: 'btn btn-success'
流れとしては、
1、ゲストログイン用のコントロラーを作る
2、ゲストログインの処理をコントローラーに書く
3、ビュー側での処理を書く
4、ルーティングを設定する
5、ゲストログインできるようになる。
こんな感じですね。
バチくそに詰まったところとしては、
skip_before_action :login_requiredでログインの要求をスキップし忘れてたせいで永遠にログイン画面に行ってたことがあったので、忘れずに設定しましょう。
参考
https://yukitoku-sw.hatenablog.com/entry/2020/02/05/221212
https://qiita.com/tktk0430/items/4fe69c8efcb6a9c26ca5
https://qiita.com/take18k_tech/items/35f9b5883f5be4c6e104
https://note.com/john01/n/n4c7d00d585fd#SnGXV
https://qiita.com/aiandrox/items/65317517954d8d44d957#ゲストユーザーログイン
https://docs.ruby-lang.org/ja/latest/method/SecureRandom/s/urlsafe_base64.html
https://qiita.com/4geru/items/e9c6545eb211124f153d
https://qiita.com/taimuzu/items/0a21738d018f475d63ae