Facebook PHP SDK 4.0.XのFacebookRedirectLoginHelperは、ネイティブセッションを使っているので、セッションを有効にしないと動かないという罠がある。Laravelだとネイティブセッション使って無くて困る。storeState
とloadState
という関数でセッションを使っていて、コメントを読むとネイティブセッションを使いたくないなら継承してオーバーライドしろやと書いてあるので、そうする。
/**
* Stores a state string in session storage for CSRF protection.
* Developers should subclass and override this method if they want to store
* this state in a different location.
*
* @param string $state
*
* @throws FacebookSDKException
*/
どっか自作クラスの置き場所を作るなどする場合は(app/libs
とか)、autoloadのためにcomposer.jsonに追記してdump-autoload。
:
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/libs",
"app/tests/TestCase.php"
]
:
その中でstoreState
とloadState
をオーバーライドする。
<?php
use Facebook\FacebookRedirectLoginHelper;
class LaravelFacebookRedirectLoginHelper extends Facebook\FacebookRedirectLoginHelper {
protected function storeState($state)
{
Session::put('FBRLH_state', $state);
}
protected function loadState()
{
return $this->state = Session::get('FBRLH_state');
}
}
それでFacebookRedirectLoginHelperの代わりにLaravelFacebookRedirectLoginHelperを使ってログイン処理を書けばよい。