symfony2手动创建RememberMe(免登录)Cookie

实现“一周内免登陆”的功能方式:

(1)手动实现

   手动建立REMEMBERME的Cookie:

   具体加密方式在Symfony/Component/Security/Http/RememberMe/TokenBasedRememberMeService.php中的generateCookieValue

/**
 * 设置REMEMBERME Cookie 用于自动登录 
 * 
 * @author xuejiehome
 * @param string $username 明文用户名
 * @param string $bcryptHasherPassword 加密后的密码
 * @param integer $expiry_timestamp 过期时间戳
 */
public function setRememberMeCookie($username, $bcrypt_hasher_password, $expiry_timestamp = '')
{
    $config = $this->config;
    empty($expiry_timestamp) && $expiry_timestamp = time() + 86400;
    $remembermeCookieValue = $this->generateRememberMeCookie($username, $bcrypt_hasher_password, $expiry_timestamp);
    setcookie("REMEMBERME", $remembermeCookieValue, $expiry_timestamp, '/', $config::CURRENT_DOMAIN, '', true);
}
 
/**
 * 生成 REMEMBERME Cookie 用于自动登录
 * 
 * @author xuejiehome
 * @param string $username 明文用户名
 * @param string $bcryptHasherPassword 加密后的密码
 * @param integer $expiry_timestamp 过期时间戳
 * @return string
 */
private function generateRememberMeCookie($username, $bcrypt_hasher_password, $expiry_timestamp)
{
    $className = 'JyStoreBundleMobileStoreBundleEntityUser';
    $key = 'key';
    $hash = hash_hmac('sha256', $className . $username . $expiry_timestamp . $bcrypt_hasher_password,$key);
    return base64_encode("{$className}:" . base64_encode($username) . ":{$expiry_timestamp}:{$hash}");
}

       上面的$key是指security.yml中设置的key

(2)利用配置文件


一周内免登陆复选框名称默认为:_remember_me

by 雪洁 2015-02-06 09:33:31 2077 views

1 Comments

小二不上酒 2016-04-06 16:00:42
能不能教下怎么使用sf实现登录功能呢?我看了官方文档,一直实现不了...
雪洁 2016-04-06 16:01:52
不好意思最近比较忙,没来得及看评论,我们一般是通过安装FOSBundle来做用户的管理的
雪洁 2016-04-06 16:08:22
你也可以看下这篇文章,就是登陆的:http://www.xuejiehome.com/blread-1904.html
我来说几句

相关文章