讓 laravel 5 連結 facebook 登入(使用 socialite )
為使用 laravel 的網站接上 facebook login,無論是使用官方的 php sdk,還是用另一個比較有名的第三方套件,都無法成功接上,出現了如下面的錯誤。
Cross-site request forgery validation failed. The "state" param from the URL and session do not match.
Facebook SDK returned an error: Cross-site request forgery validation failed. Required param "state" missing from persistent data.
(應該是 session 問題,把 laravel 的 session 打開可以解決)
Graph returned an error: Invalid redirect_uri: 無法載入網址
Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request
(明明有設定 redirect_uri ,沒有使用 laravel 的情況下也是成功的,原因不明)最後,在面對失敗了好多次之後,忽然發現原來 laravel 有提供官方的 socialite 套件,一試,終於成功了!
使用方法如下:
首先,安裝 socialite
composer require laravel/socialite
修改 config/app.php,在 providers 中,加上
Laravel\Socialite\SocialiteServiceProvider::class,
以及在 aliases 中,加上
'Socialite' => Laravel\Socialite\Facades\Socialite::class,
然後,要設定它,到 config/services.php 中,加上
'facebook' => [ 'client_id' => '你的 app id', 'client_secret' => '你的 app secret', 'redirect' => 'facebook 處理完成後,要導回到你網址的那個網址絕對路徑,例如 http://example.com/facebook/callback', ],
確保你的 facebook app 有安裝及啟用 Facebook login 功能。
然後到 Facebook Login 中,設定你應用程式的 Valid OAuth redirect URIs ,你要輸入絕對路徑,例如 http://example.com/facebook/callback 。
設定完成了,現在就寫程式,試試用它來登入吧,在這個例子中,我要求了 email 權限,如果你不需要,把它拿走就可以了。
如果要讓大家都可以使用,記得幫你應用程式的 Facebook Login 功能申請審批。
回到我們的 laravel 了,在 app/Http/routes.php 中,加上
Route::get('/facebook/link', function() { return Socialite::driver('facebook') ->scopes(['email'])->redirect(); }); Route::get('/facebook/callback', function() { $user = Socialite::driver('facebook')->user(); var_dump($user); });
完成了,現在到 /facebook/link,是不是看到從 facebook 來的資料了呢?
object(Laravel\Socialite\Two\User)#184 (10) { ["token"]=> string(165) "不告訴你 :p" ["refreshToken"]=> NULL ["expiresIn"]=> string(7) "5184000" ["id"]=> string(17) "不告訴你 :p" ["nickname"]=> NULL ["name"]=> string(8) "Toby Lam" ["email"]=> string(13) "自己查" ["avatar"]=> string(69) "https://graph.facebook.com/v2.6/不告訴你 :p/picture?type=normal" ["user"]=> array(5) { ["name"]=> string(8) "Toby Lam" ["email"]=> string(13) "自己查" ["gender"]=> string(4) "male" ["verified"]=> bool(true) ["id"]=> string(17) "不告訴你 :p" } ["avatar_original"]=> string(68) "https://graph.facebook.com/v2.6/不告訴你 :p/picture?width=1920" }
本來可以正常登入,突然變成無法登入且出現此訊息,很奇怪。session有打開。
回覆刪除要試試用 laravel/socialite 嗎?
刪除