RailsでよくあるPost-Comment型のアプリ(記事を投稿してそこにコメントできるアプリ)を作成中です。ユーザ認証はDeviseを使用しています。
以下のQiita記事を参考にして進めたところ、Eメール&パスワードでの認証と、Twitterでの認証を作成することができました。
[Rails] deviseの使い方(rails5版)
DeviseとOmniauthで認証管理
Devise+OmniAuthでユーザ認証を実装する手順
Twitterアカウントでサインアップするとき、以下のようにEmailとPasswordのカラムに擬似的な値をセットするようにしています。
ruby
1class User < ActiveRecord::Base 2 devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :omniauthable 3 4 def self.find_for_oauth(auth) 5 user = User.where(uid: auth.uid, provider: auth.provider).first 6 unless user 7 user = User.create( 8 uid: auth.uid, 9 provider: auth.provider, 10 name: auth.info.name, 11 email: User.get_email(auth), 12 password: Devise.friendly_token[4, 30]) 13 end 14 user 15 end 16 17 private 18 def self.get_email(auth) 19 email = auth.info.email 20 email = "#{auth.provider}-#{auth.uid}@example.com" if email.blank? 21 email 22 end 23end
しかし、例えばユーザが名前を変更したいときなど、ユーザ情報の変更の際にパスワードが要求されます。このとき、Twitter認証でログインしたユーザにとっては、パスワードがわからないので名前の変更ができない、という問題があります。
また、そもそもEmailとPasswordを擬似的に生成するという方法自体が、Deviseを騙し騙し使っているようで非常に懐疑的です。できれば、EmailとPasswordをカラムから抹消したいです。
(実際にカラムを消してみたところ、ユーザ名を変更しようとしたらundefined method 'update_with_password'
というエラーが出て失敗しました。。)
以上のように、EmailとPasswordをカラムに持たせることなく、Twitter認証でユーザ認証できるようにし、更にユーザ名の変更などもパスワード無しで実現したいのですが、今のところ上述のようにうまく行っていません。
何か良いアイデアは無いでしょうか。
お願いします。助けてください。何でもしますから。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。