通过电子邮件链接验证Symfony2

时间:2012-07-04 08:43:07

标签: php authentication symfony

您是否知道通过电子邮件链接在Symfony2平台上验证用户的提示?

非常感谢

3 个答案:

答案 0 :(得分:2)

您可能需要查看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);
}

答案 1 :(得分:1)

也许是这样的:

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

注意我并不保证这是一种安全的方式来做任何事情(不确定在通过链接进行身份验证时是否可以保证安全)。只是一些让你前进的想法。

答案 2 :(得分:0)

解决此问题的最佳方法是实现自定义身份验证提供程序。身份验证提供程序负责用户身份验证,使用您想要的几乎所有内容:可以是cookie(例如,记住我),表单数据,或者在您的情况下,查询字符串参数。

你需要:

  • 用于存储身份验证参数的自定义令牌
  • 可以管理令牌并对用户进行身份验证的自定义身份验证提供程序
  • 一些粘合将这些组件连接到安全系统(意味着您需要定义工厂和一些配置)。

使用身份验证提供程序,您将有机会将记录的用户分配给自定义安全角色(记住我的功能),这样您就能够将已记录的用户与“自动记录”的用户区分开来。如果您想限制自动登录用户可以执行的操作(例如,您可能希望仅对一个特定操作进行身份验证),这可能非常有用。

官方食谱中有关于自定义身份验证提供程序的配方:

http://symfony.com/doc/current/cookbook/security/custom_authentication_provider.html

我已经完成了你需要的所有内容,并在screenfony.com博客上写过:

http://www.screenfony.com/blog/symfony-custom-authentication-provider