コントローラでRemember Me Cookieを手動で作成する方法を誰かが説明できますか?symfony2のcookieを手動で保存する(FOSUserBundle)
「登録」 ボタンを押した後にユーザーがログインしたままにしておきたい場合は、後でそのユーザーの資格情報でログインする必要はありません。
私は手動でクッキーを作成しようとしましたが、クッキーを推測しています 値が正しくないため、 "remember me"機能 は機能しません。 正しい名前のクッキーが設定されます。私はそれをチェックした。
Remember me機能は、ユーザーの資格情報で通常の ログイン手順を使用する場合に、正常に機能します。
のsecurity.yml は、クッキーが設定されていても、これは私が今持っているものである私
security:
firewalls:
main:
remember_me:
lifetime: 86400
domain: ~
path: /
key: myKey
に覚えのsecurity.yml、それは動作しません。
$um = $this->get('fos_user.user_manager');
$member = $um->createUser();
… Form stuff with bindRequest etc.
$um->updatePassword($member);
$um->updateUser($member);
$providerKey = $this->container->getParameter('fos_user.firewall_name');
$securityKey = 'myKey';
$token = new RememberMeToken($member, $providerKey, $securityKey,
$member->getRoles());
$this->container->get('security.context')->setToken($token);
$redirectResponse = new RedirectResponse($url);
$redirectResponse->headers->setCookie(
new \Symfony\Component\HttpFoundation\Cookie(
'REMEMBERME',
base64_encode(implode(':', array($member->getUsername(),
$member->getPassword()))),
time() + 60*60*24
)
);
return $redirectResponse;
更新:
また、私は反射で PersistentTokenBasedRememberMeServicesクラスで作業しようとしましたが、それは動作しません。クッキーが設定されますが、私がのSymfony v2.0.5とFOSUserBundleを使用してい
$token = $this->container->get('security.context')->getToken();
$providerKey = $this->container->getParameter('fos_user.firewall_name');
$securityKey = 'myKey';
$persistenService = new
PersistentTokenBasedRememberMeServices(array($um), $providerKey,
$securityKey, array('path' => '/', 'name' => 'REMEMBERME', 'domain' =>
null, 'secure' => false, 'httponly' => true,
'lifetime' => 86400));
$persistenService->setTokenProvider(new InMemoryTokenProvider());
$method = new \ReflectionMethod('Symfony\Component\Security\Http\RememberMe\PersistentTokenBasedRememberMeServices',
'onLoginSuccess');
$method->setAccessible(true);
$method->invoke($persistenService, $request, $redirectResponse, $token);
を働いていない1.0
UPDATE 2:私は、第三の方法を試してみた
。反射を超えるがない場合と同じ:
$token = $this->container->get('security.context')->getToken();
$providerKey = $this->container->getParameter('fos_user.firewall_name');
$securityKey = 'myKey';
$persistenService = new PersistentTokenBasedRememberMeServices(array($um), $providerKey, $securityKey, array('path' => '/', 'name' => 'REMEMBERME', 'domain' => null, 'secure' => false, 'httponly' => true, 'lifetime' => 31536000, 'always_remember_me' => true, 'remember_me_parameter' => '_remember_me'));
$persistenService->setTokenProvider(new InMemoryTokenProvider());
$persistenService->loginSuccess($request, $redirectResponse, $token);
をベースとした上で、生の手続きを投稿するには、parameters.ymlにし、セキュリティに入れなければなりません.ymlは%your_parameter_name%でそれらを呼び出します。セキュリティとパラメータで利用できるようになりました – guillaumepotier
+1このためにSymfony2のセキュリティクラスを使用しています。 remember-me cookieのデフォルトのcookie名は 'REMEMBERME'です。ファイアウォールと同じCookie名を使用する場合のみ、手動で設定されたCookieに対して認証されますが、セキュリティリスナーによって認識されます。 – flu
引数1をSymfony \ Bridge \ Doctrine \ Security \ User \ EntityUserProvider :: __ construct()に渡すと、Doctrine \ Common \ Persistence \ ManagerRegistryインターフェイスが実装されていなければなりません。D: –