Ruby on Rails Learning Diary

学習したことの整理用です。

Sorceryを使ってFacebookでログインする

実装の流れ

  • mkcertを使って、SSL通信(https)をできるようにする
  • Facebook for Developersに登録し、アプリのキーやIDを取得する
  • sorceryのwikiに沿って設定
  • Facebookログイン(クライアントOAuth)の設定

細かいことは、参考にしたブログに詳しいので、自分が詰まったところをメモしていきます。
何回かエラーを出し、時間がかかってしまいました。

OAthとは

一番分かりやすい OAuth の説明 - Qiita

三者となるアプリケーションに対して安全にアクセス権限を提供するためのプロコトル 『パーフェクトRuby on Rails 』P288

mkcert

mkcertはローカルの環境で、オレオレ認証局の作成とオレオレ証明書を発行してくれるツール。
Facebook認証でHTTPSが強制されるので、HTTPSを有効にする必要があるため、この作業をしています。

HTTPSを有効にするには、認証局を使用して、あなたのウェブサイトを識別する証明書を取得します。(Facebook for Developersより)

公式
GitHub - FiloSottile/mkcert: A simple zero-config tool to make locally trusted development certificates with any names you'd like.

参考ブログ
Railsの開発環境でHTTPSを有効にする · yy blog mkcertを使いRailsのローカル開発環境をSSL化する方法(for Mac) - Qiita 数分でできる!mkcertでローカル環境へのSSL証明書設定 | Hivelocity (ハイベロシティ) デジタルでビジネスを最適化

Facebook for Developers

これでマイアプリを登録して、設定>ベーシックから、アプリIDとapp secretを取得しておきます。
取得した情報は、config/initializers/sorcery.rbの中に記述します。後述するsorceryのWikiに記載方法が載っています。
ただし、秘匿情報はここに直接記述するのではなく、credenttialに保存して、呼び出す形にします。
有効なOAuthリダイレクトURIも登録します。 Facebook for Developers

f:id:Study-Diary:20200911144731p:plain
Facebook for Developers

sorcery

sorcery公式に沿って実装していきます。 migrationファイルやコントローラー生成も。 コピペして少々直すくらい。

External · Sorcery/sorcery Wiki · GitHub

エラーを出したところ①

f:id:Study-Diary:20200911145208p:plain
エラー

ActionController::UrlGenerationError in UserSessions#new Showing /Users/ ~~~/app/views/user_sessions/new.html.erb where line #22 raised: No route matches {:action=>"oauth", :controller=>"oauths", :provider=>:facebook}, missing required keys: [:provide]

アクションもコントローラーも合ってるのに何でだろうと思ってたら、

get 'oauth/:provide', to: 'oauths#oauth', as: :auth_at_provider

provideになってた。公式からコピペして貼ったのに、シングルクォートに変えるときにrを消してた。

エラーを出したところ②

ログインボタンを押すとfacebookじゃなくてrootへリダイレクトされてしまう skip before action が機能してない??などど思ったけど、 サーバーをよくみると、render_500となっている。

f:id:Study-Diary:20200911150024p:plain
サーバー
エラーは起こっていないようなのになぜ?? routes.rbを確認すると以前設定した、全部拾ってくるルーティングが上に記述してあった。 ルーティングは上から順番に読み込むため、順番に気をつける必要がある。
直した。

post 'oauth/callback', to: 'oauths#callback'
get 'oauth/callback', to: 'oauths#callback' # for use with Github, Facebook
get 'oauth/:provider', to: 'oauths#oauth', as: :auth_at_provider
get '*path', to: 'application#render_500'
get '*path', to: 'application#render_404'

参考

『パーフェクトRuby on Rails 』P288

【Rails】Sorceryでfacebook認証 Sorceryの設定 - Qiita
【Raila】SorceryのExternalを使用してSNSログインを実装(Facebook認証) - Qiita

メモ

pry-buybug
【Rails】Pryについて徹底解説! | Pikawaka - ピカ1わかりやすいプログラミング用語サイト