Sorceryを使ってFacebookでログインする
実装の流れ
- mkcertを使って、SSL通信(https)をできるようにする
- Facebook for Developersに登録し、アプリのキーやIDを取得する
- sorceryのwikiに沿って設定
- Facebookログイン(クライアントOAuth)の設定
細かいことは、参考にしたブログに詳しいので、自分が詰まったところをメモしていきます。
何回かエラーを出し、時間がかかってしまいました。
OAthとは
第三者となるアプリケーションに対して安全にアクセス権限を提供するためのプロコトル 『パーフェクトRuby on Rails 』P288
mkcert
mkcert
はローカルの環境で、オレオレ認証局の作成とオレオレ証明書を発行してくれるツール。
Facebook認証でHTTPSが強制されるので、HTTPSを有効にする必要があるため、この作業をしています。
HTTPSを有効にするには、認証局を使用して、あなたのウェブサイトを識別する証明書を取得します。(Facebook for Developersより)
参考ブログ
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
sorcery
sorcery公式に沿って実装していきます。 migrationファイルやコントローラー生成も。 コピペして少々直すくらい。
External · Sorcery/sorcery Wiki · GitHub
エラーを出したところ①
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となっている。
エラーは起こっていないようなのになぜ??
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わかりやすいプログラミング用語サイト