Railsプログラミング学習者の「作ってみた」を応援するサイト「Eggineer」チュートリアルで作成したユーザーモデルやログインフォームや新規登録フォームを壊し、devise、twitter認証を実装したところまでの記録です。Flickr前回の続きになります。自分のアプリはrailsチュートリアルを元にUserモデルを実装しているので、はじめにモデルを削除。Userそして適当な名前のmigrationファイルを新たに作成してテーブルも削除(モデルとテーブルって一緒に消えないんですね。"users"出たので、中途半端にデータベースをいじるのは諦めて、migrationファイルをいじりながらこちらの記事を参考にしてデータベースをリセット!!!(めちゃ怖かった)qiita.comここまでやるとデータベース関連のエラーが消えたので一歩前進。gemの実装ここからが本題で、deviseの実装に取り掛かりました。qiita.comはい。原因解決方法はこちらを参照。'user/sessions',}/users/sign_inの画面が出ました(涙)解決に至るまでなかなかの時間を要しました。ユーザー登録、ログインは可能なことを確認。そのまま先ほどのリンク先に倣って日本語化。ここまででリンク先の内容はひと段落。単数形か複数形か問題に関しては、modelなどでも不具合があり、時間を取られました。ルートの定義を最新のものに変更その他、エラー出た箇所といえば、パスに関して参照する記事によってuser_omniauth_authorize_path(:twitter)と書かれていたり、user_twitter_omniauth_authorize_pathと書かれていたりしますが、gemのバージョンが新しい場合はuser_twitter_omniauth_authorize_pathを使うことになっているようでした。これも気づくまでに時間を要しました。credentials)そのあとは、下記の記事を参考にして、deviseにusernameカラムを追加したり色々しました。qiita.comそして最終的につまづいたのはここ。credentialsのエラー。ググってもあまり例が出てこないなあ。Requiredとの記載があり。invalid_credentialsでググると、かなり闇が深そうで、qiita.comこのあたりが関係しそうだとか、書いてあるのですが、原因は結局分からず。翌日、色々な記事を見返していた結果、環境変数に問題があることが発覚。authentication.config/initializers/omniauth.rbには余計なこと書くなと。前回devise使わないでomniauth実装した時にこのファイルをいじってしまっていたんですよね。config/initializers/omniauth.rbの余計な箇所を消した結果、無事ローカル環境ではツイッターログインできるようになりました!ローカル環境では!herokuにアップロードしたらエラーということで、本番環境ではエラーが出ました。これまた環境変数周りではないかと思っているので、qiita.comdevcenter.heroku.comこの辺りをよく読んで勉強してみます。参照する記事を吟味せずにコーディングをスタートしてしまったこと記事を読み漁っている割には本質的な情報を見逃しており、逆に細かい表記の違いでエラーを起こしてしまっていることかなと。次回から、初めて取り組む実装に関して記事を参照する際にはgem含めた環境のバージョンが古くないかをよく確認して、参照する記事を絞り、少なくとも表記方法のミスを減らせればいいなと思います。なく、データベース周りがおかしかったようでした。この記事でもはじめにデータベースを削除していますが、そこが中途半端になっていた模様。何度かリセットしたり、マイグレーションファイルを整理した結果、エラーが消えました。teratail.comまた、アセットパイプラインの設定を変更するのも重要なようでwww.transnet.ne.jpこちらを参考に設定を直したところ、崩れていたレイアウトが少し直りました。追記(2018/3/9)devise+omniauthでTwitterログイン実装したのですが、プロフィール画像もデータベースを保存できるようにしました。EggineerはTwitterログインとメールアドレスログインどちらも可能なので、Twitterログインの場合はTwitterのプロフィール画像を、メールアドレスログインの場合はCarrierWave(gem)を使って画像をアップロードしようとしたら、上手くいきませんでしたので、報告です。始めはTwitterから画像を持ってくる処理を実装。auth.info.nicknameとかapp/models/user.rbに書いたと思うのですが、そこにimageも足してあげる。%>みたいな感じで書くと出力できます。はい、TwitterログインはOK。次にメールアドレスログインをチュートリアルを参照して実施。マイクロポストの画像投稿はmicropostですが、userに書き換えて実施。あと自分はpictureじゃなくてimageにしてます。これはこれでできて、メールアドレスログインもOK。思ったのですが、Twitterログインの画像が取り込まれなくなったんですよね。sのログ見てみると、さっきまでhttp://-------.jpgが送信されていたのに、突然nilが送信されるようになっていました。ググったところ、stackoverflow.comCarrierwaveを使うと、httpじゃなくてhttpsに変換しないと読み込まれない、と。