###前提・実現したいこと
///0222追記
すみません!そもそも「実現したい事」を書くのを忘れていました!
エラーは後述の通り「Twitter認証後データがテーブルに格納されない」ことなのですが、それを回避して
僕が意図している
「Twitter認証をして、そこから取ってきたデータをテーブル内のレコードとして格納する」事が目的です。
///以下本文
ruby on railsを用い(この表現も正確か分かりません)自分でwebページを作ってみたいと思っております。
0から作るのではなく、
Ruby on Rails チュートリアルを全行程終わらせた成果物をブラッシュアップしていく、という形です。
現在、deviseを用いてログイン機能を実装しまして
Twitterやfacebookでの認証も追加したいと思いまして
こちらの記事 [Rails] deviseの使い方 - Qiita
を読み、上から一つずつ進めていっています。
既にID/Passでの認証などは終わらせているので、適宜「これは既に書いた」というコードは無視して進めています。
参考にさせていただいたリファレンスにおんぶにだっこなのですが
当該記事の「アカウント登録確認メールを送る」内の「メールが実際に届くようにする」までを実装したのですが
メールが届いて無事Twitter認証も終わり!と肩の力を抜きました。
###発生している問題・エラーメッセージ
ところが、ログアウト後、再度「Sign in with Twitter」を押しましたところ
Twitter側で「アプリケーションに戻ります。」というメッセージが表示され
無事認証されているなと思いきや
自サイトに戻ってきた時、アカウント登録画面に遷移してしまいます。
エラーメッセージが発生しないのでやや時間が掛かりましたが
これはどうも「twitter認証が完了した後もテーブルにデータが作成されない」から?だという事が分かりました。
前述の記事を参照させていただき、「user」部分をstudentに変え
当該studentモデル内にself.from_omniauthとself.new_with_sessionを記載しているのですが…
# app/models/student.rb class Student < ActiveRecord::Base devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :confirmable, :omniauthable, omniauth_providers: [:twitter,:facebook] def self.from_omniauth(auth) where(provider: auth["provider"], uid: auth["uid"]).first_or_create do |student| student.provider = auth["provider"] student.uid = auth["uid"] student.studentname = auth["info"]["nickname"] end end def self.new_with_session(params, session) if session["devise.student_attributes"] new(session["devise.student_attributes"], without_protection: true) do |student| student.attributes = params student.valid? end else super end end end
ちなみに自サイトは2種類のユーザー種別がありまして、その両方にdeviseを設定しており
そのうちstudentユーザーにのみtwitter認証を実装しようとしています。
そのため一つのモデルより各種deviseのviewやcontrollerなどが複雑な構造になっています。
なので読み込むべきファイルではないものを参照しているのかな…とも思いましたが、
どこから手を付けたらいいのか判断できかねるので質問させていただきました。
###謝辞
問題解決にあたり、何か必要な情報などありましたら遠慮なくお申し付けください。随時追加させていただきます!
長文になりましたが、ここまで目を通していただき誠にありがとうございました。
何卒、お力添えをよろしくお願い申し上げます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。