質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

パスワード

パスワードは主に情報にアクセスする際に扱われます。主に、アクセス可能なユーザーを限定する手段として使われます。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

解決済

2回答

1213閲覧

rubyのdeviseでパスワードなしでログインさせたい

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

パスワード

パスワードは主に情報にアクセスする際に扱われます。主に、アクセス可能なユーザーを限定する手段として使われます。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

0グッド

2クリップ

投稿2019/08/27 04:15

前提・実現したいこと

rubyのdeviseを使ってログイン処理を実装しています。
登録されているメールアドレスにtoken付きのURL発行して、確認メールにあるリンクをクリックしたら即ログインできるようにしたいです。

近い機能としてdeviseの「views/users/passwords/new.html.erb」で登録されている
メールアドレス宛にtoken付きのURLを発行しているので、可能ならば、この処理内で
パスワードをスルーしてログインできるようにすることは可能でしょうか?

もし可能であれば、どのように記述すればいいのでしょうか?
発行されているtokenが暗号化?複合化?してあるので照合の仕方がわかりません。

ユーザーが新規登録時に間違ったemailアドレスを記入した場合やたまたまそのemailを受け取った第三者にアカウントを乗っ取られてします可能性がありますが、こちらは考えないものとします。

該当のソースコード

class Users::PasswordsController < Devise::PasswordsController # GET /resource/password/edit?reset_password_token=abcdef # def edit # ここで受け取ったtokenでuserテーブルのtokenと照合して一致すればログイン後の画面へ遷移。しなければroot_pathへ # end # PUT /resource/password # def update # end end

補足情報(FW/ツールのバージョンなど)

rails 5.2.3
ruby 2.6.3p62
devise 4.7.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

実装したことはないのですが、devise公式wikiに該当の記事がありましたのでこちらを参考にしてみてはいかがでしょうか?

How To: Email only sign up
https://github.com/plataformatec/devise/wiki/How-To:-Email-only-sign-up


sorceryだとqiitaの記事がありました。
【Rails × sorcery】Slackみたいなパスワードなしのメールだけログイン機能を実装してみる
https://qiita.com/tonishi/items/832dbd6c1a0a012519fd

投稿2019/08/27 04:39

no1knows

総合スコア3365

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/08/27 08:32

記事を参考にいろいろと試していたため、返信が遅くなり申し訳ありません。 回答ありがとうございます! 記事を参考に実現したい機能が再現できました!
no1knows

2019/08/27 08:36

それはよかったです!
guest

0

解決方法

※deviseの記述方法を使わず無理やり動かしてますが、ご了承ください。
1.コントローラーに新しくアクション(auth)を追加。

def auth user = User.where("id = ? and reset_password_token = ?", params[:format], params[:reset_password_token]).first if user.present? user.reset_password_token = nil user.save sign_in user redirect_to #ログイン後のパス else redirect_to #rootのパス end end

2.routes.rbに追加したアクションを追加

devise_scope :user do get 'users/auth' => 'users/passwords#auth' end

3.メール本文に追加したアクションのpathにtokenを持たせたリンクを追加

<%= link_to 'ログイン', users_auth_url(@resource, reset_password_token: @token) %>

投稿2019/08/27 08:44

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問