[Ruby on Rails]悪魔的に簡単なゲストログイン実装方法(ポートフォリオ作成)
はじめに
就職・転職用にポートフォリオを作成している人に向けて。
ポートフォリオ必須といわれているゲストログイン。
- メールアドレスとパスワードだけで新規登録できるように設計したからいらないと思っている人
- 難しそうだから辞めておこうと思っている人
この方法はめちゃめちゃ簡単です。参考にしてください。
(ただしデメリットもあるので、あくまで参考程度に)
前提の環境
- Ruby on Rails
- gem deviseでのログイン機能実装
Userテーブルの中身は下記として説明します。
User | |
---|---|
name | string |
string | |
password | string |
created_at | datetime |
updated_at | datetime |
今回の実装イメージ
きたない図でごめんなさい。
通常のログインでは利用者に情報を入力してもらい、そのデータをもとにUserを新しく作成しています。
それとは異なり今回のゲストログインはあらかじめ設定されたデータでUserを新しく作成します。
なので「ゲストログイン」より「簡単新規作成」の方が言葉的に近いかもしれません。
あらかじめデータを作成しておく必要があるのでdeviseで生成されるルーティングとコントローラは使用できません。
ゲストログイン用のものを自作していきます。
実装方法
1.ルーティングの設定
config/routes.rb
devise_for :users # デバイスで生成されるルーティング
post '/guest_sign_in' => 'homes#guest' # 今回自作したルーティング
devise_for :users # デバイスで生成されるルーティング
post '/guest_sign_in' => 'homes#guest' # 今回自作したルーティング
HTTPメソッドはpost
で書きます。
URL・コントローラ・アクションは代替可能です。(今回はHomesコントローラのguestアクションで説明を続けます)
2.コントローラの設定
def guest
user = User.new(user_params)
user.name = "ゲストユーザー"
user.email = SecureRandom.alphanumeric(15) + "@email.com"
user.password = SecureRandom.alphanumeric(10)
user.save
sign_in user
redirect_to how_to_path
end
private
def user_params
params.permit(:name, :email, :password)
end
ファットなコントローラかもしれないですが、見た目の分かりやすさ重視で書きました。
SecureRandom.alphanumeric(15)
で15文字のランダムな英数字を自動で生成してくれます。
これだけだと「@がない」というバリデーションに引っかかるので、[email protected]
を末尾につけています。
余談
deviseの一意性のバリデーションを考慮して今回は15桁で設定しました。
1桁で英(26文字)+数(10文字)=36通り。(英語の大文字小文字の区別は無しとして)
2桁で36x36=1,296通り
3桁で36x36x36=46,656通り
・
・
15桁で221,073,919,720,733,357,899,776通り(約2000垓通り)
2020年版の世界保健統計によると、全世界の総人口は約76億人なので
単純計算で全世界の人が1人約30兆回ゲストログインしてやっと一意性に引っかかることになります。
(米津玄師さんの代表曲「lemon」のYoutube再生回数が現時点で6.5億回なので、その4000倍以上です笑)
あくまでランダム生成なので単純計算はできませんが、10桁くらいでいいと思います。
余談終わり。
他にもありますので詳しくはRuby 3.0.0 リファレンスマニュアル を参照してください。
Userテーブルに他のカラムがあり、バリデーションを設定している場合は別途追加する必要があります。
例えば電話番号を設定している場合は、
user.tel = 09012345678
のようにしてuser.save
より前に追加してください。
下のpermit
に追加することも忘れずに。
データベースに保存後、ログイン状態にする必要があるのでdeviseの機能を借りてsign_in user
としリダイレクトさせます。
3.ビューの設定
最後にビューにゲストログイン用のリンクを作成して完成です。
<%= link_to 'ゲストログイン', '/guest_sign_in', method: :post %>
この方法のメリット・デメリット
メリット
- 記述も少なく難しい技術も使っていないのですごく簡単
上記の場合15行だけ。難しい設定も理解が必要なメソッドもなし。
- ゲストユーザーの情報を編集されても動作に影響ない
ここは大事。編集されないようにアクセス制限の設定したり、編集権限を考えたりする必要もない。
デメリット
- ゲストログインした分だけUserが増える(データベース圧迫)
別途管理者ページを作って管理したほうが良いかも。(私は作成しています)
- seedsでゲストログイン用のデータを作成することはできない
ゲストが投稿した記事等をあらかじめ作成しておくことはできないです。
ただ、他のユーザー投稿は問題なくseedsで作成できます。
上記の場合15行だけ。難しい設定も理解が必要なメソッドもなし。
ここは大事。編集されないようにアクセス制限の設定したり、編集権限を考えたりする必要もない。
別途管理者ページを作って管理したほうが良いかも。(私は作成しています)
ゲストが投稿した記事等をあらかじめ作成しておくことはできないです。
ただ、他のユーザー投稿は問題なくseedsで作成できます。
私はデメリットの影響がないPFを制作する予定だったためこの方法で実装しました。
制作物によっては2つ目のデメリットが痛い場合があるので気を付けてください。
参考
簡単ログイン・ゲストログイン機能の実装方法(ポートフォリオ用)
他の方法を試す場合は、この方の記事がとても分かりやすいのでこちらを参考にしてみてください。
(私の方法とその1は似ていますが、若干違います。私が簡単新規作成なのに対し、この方はよりゲストログインに近い実装を紹介されています。お好みの方法で試してください。)
Author And Source
この問題について([Ruby on Rails]悪魔的に簡単なゲストログイン実装方法(ポートフォリオ作成)), 我々は、より多くの情報をここで見つけました https://qiita.com/rised/items/9b59f9aaaf37b511fd6d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .