電子メール リンクから Symfony2 プラットフォームでユーザーを認証するためのヒントを知っていますか?
前にたくさんのありがとう
ユーザーを管理するためにかなりの機能が組み込まれているFOSUserBundleを確認することをお勧めします。
ユーザーの登録にも同様の手法を使用します。以下にいくつかの基本的なコードを示します (エラー処理と、URL パラメーターに基づいて実際にユーザーを検索するメソッドを入力する必要があります。
/**
* @Route("/register/activate/{hash}/{oId}", requirements={"hash"="\w+", "oId"="\d+"}, name="register_byhash")
* @Method({"GET"})
* @Template()
*/
public function registerByHashAction($hash, $oId)
{
$um = $this->container->get('fos_user.user_manager');
$user = $um->findUserByHash($hash, $oId); // You will need to supply a method that finds the user and checks the hash
// Mark the user as now active and save the user here
$providerKey = $this->container->getParameter('fos_user.firewall_name');
$token = new UsernamePasswordToken($user, null, $providerKey, $user->getRoles());
$this->container->get('security.context')->setToken($token);
$url = $this->container->get('router')->generate('welcome');
return new RedirectResponse($url);
}
おそらく次のようなものです:
Pesudocode:
generate hashed link that is unique to user (e.g. md5(email+timestamp+salt) )
store hash for user in db
Send link to user in email (same email as used in hash)
when user accesses site using link:
fetch hash part from link
match hash against database
if match is found, authenticate, else fail
これが安全な方法であることを保証するものではないことに注意してください (リンクのみを介して認証する場合に安全である可能性があるかどうかさえわかりません)。あなたを動かすためのいくつかのアイデア。
これを解決する最善の方法は、カスタム認証プロバイダーを実装することです。認証プロバイダーは、必要なほとんどすべてを使用してユーザー認証を担当します。たとえば、Cookie (remember me など)、フォーム データ、またはこの場合はクエリ文字列パラメーターなどです。
あなたは必要になるでしょう:
認証プロバイダーを使用すると、ログに記録されたユーザーをカスタム セキュリティ ロールに割り当てることができるため (remember me 機能と同様)、ログに記録されたユーザーと「自動ログに記録された」ユーザーを区別することができます。これは、自動ログインされたユーザーができることを制限したい場合に非常に便利です (たとえば、特定の 1 つのアクションに対してのみ認証を有効にしたい場合があります)。
カスタム認証プロバイダーに関する公式クックブックにレシピがあります。
http://symfony.com/doc/current/cookbook/security/custom_authentication_provider.html
私はあなたが必要とするほとんどのことを行い、それについて screenfony.com ブログに書きました:
http://www.screenfony.com/blog/symfony-custom-authentication-provider