讓 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 嗎?
刪除