###前提・実現したいこと
laravelで作成したWebサイトにFacebook認証を入れたいと考えています。
やりたいのは、
「Facebook登録」ボタンをクリックするとFacebookの認証画面が出てきて、「○○でログイン」ボタンをクリックするとTOPにリダイレクトする、といったよくあるやつです。
今回はLaravelの拡張パッケージであるSocialiteを使って実現しようとしています。
###発生している問題・エラーメッセージ
http://qiita.com/zaburo/items/6f7c072795e99fd98a75
こちらのサイトを参考に、
・facebookアプリの作成
・socialiteのインストール
・configへの追記
・.envへのfacebook_id等の追記
・Routeの記述
・controllerの記述
を行った上でfacebookログインボタンをクリックすると以下のエラーメッセージが発生します。
(多少コードは変えていますので以下のソースコードを参考にして下さい)
また、開発環境はcloud9を利用しています。
Client error: `POST https://graph.facebook.com/oauth/access_token` resulted in a `400 Bad Request` response: {"error":{"message":"Missing redirect_uri parameter.","type":"OAuthException","code":191,"fbtrace_id":"xxxxxxxxxxxx"}}
###該当のソースコード
Cntroller
<?php namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use App\Http\Requests; use Laravel\Socialite\Contracts\Factory as Socialite; class SocialController extends Controller { protected $socialite; public function __construct(Socialite $socialite){ $this->socialite = $socialite; } /** * Redirect the user to the Facebook authentication page. * (Facebook認証のページにリダイレクトする) * @return Response(レスポンスを返す) */ public function getFacebookAuth(){ return $this->socialite->driver('facebook') ->with([ 'app_id' => 123456789, 'redirect_uri' => 'https://xxxx-xxxxx.c9users.io/auth/login/callback/facebook' ]) ->redirect(); } /** * Obtain the user information from Facebook. * (facebookのユーザー情報を入手する) * @return Response */ public function getFacebookAuthCallback(){ try{ $fuser = $this->socialite->driver('facebook')->user(); }catch(\Exception $e){ //このエラーメッセージが表示されている var_dump($e); exit(); } if($fuser){ //とりあえず$fuserを表示 dd($fuser); }else{ return "something went wrong"; } } }
config/app.php
<?php //providers Laravel\Socialite\SocialiteServiceProvider::class, //providers 'Socialite' => Laravel\Socialite\Facades\Socialite::class,
config/services.php
'facebook' => [ 'client_id' => env('FACEBOOK_ID'), 'client_secret' => env('FACEBOOK_SECRET'), 'redirect' => env('FACEBOOK_CALLBACKURL'), ],
.env
FACEBOOK_ID=123456789 FACEBOOK_SECRET=xxxxxxxxxxxxxxxxxx FACEBOOK_CALLBACKURL=https://xxxx-xxxxx.c9users.io/auth/login/callback/facebook
Route
Route::get('auth/login/facebook','Auth\SocialController@getFacebookAuth'); Route::get('auth/login/callback/facebook','Auth\SocialController@getFacebookAuthCallback');
ちなみにgetFacebookAuth()
でwith()
を使ってapp_idとredirect_uriをパラメータに設定しているのは、これ無しだと、facebook側のエラーで、
The parameter app_id is required
だったり、
The parameter redirect_url is required
が表示されてしまったからです。
ちなみに、Facebookアプリ側での設定は以下の形になります。
(中身は実際のものと変えています)
・アプリID:123456789(.envのFACEBOOK_IDと同様) ・app secret:xxxxxxxxxxxxxxxxxx(.envのFACEBOOK_SECRETと同様) ・有効なOAuthリダイレクトURI:https://xxxx-xxxxx.c9users.io/
また、ログインしようとしたfacebookアカウントはfacebookの管理者アカウントです。
###試したこと
検索でSocialiteを使ったFacebook認証のやり方を調べてそれ通りにやってみましたがエラーは解消しませんでした。
エラーの内容的にredirect_uriが無い、みたいなことが書かれているのですが、必要な箇所には設定しているため何が原因なのかわかりませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
開発環境:cloud9
言語:PHP
フレームワーク:laravel5.2
パッケージ:Socialite
追加で必要な情報がございましたら教えていただければと思います。
いろいろ自分でやってみましたがうまくいかなかったので投稿させていただきました。
どうかご助力頂けますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/23 09:10
2016/11/23 10:36
2016/11/27 11:15
2016/11/27 11:23
2016/11/27 16:06