如何序列化用户的身份验证?

时间:2013-01-25 10:49:56

标签: php symfony

我的应用程序上有一个经过身份验证的部分,但身份验证是通过oauth到第三方服务完成的。我从服务中获得200回调,现在我创建/找到我的用户并将其设置为已登录。

所以我的提供者是:

providers:
    users:
        entity: { class: MainBundle:User, property: id }

我的用户实现了安全性的UserInterface,尽管我的用户实体上没有用户名,密码等属性。我假设id是我可以使用的唯一标识符。

我的令牌设置如下:

$token = new UsernamePasswordToken($user, null, 'secured_area', $user->getRoles());
$this->securityContext->setToken($token);

我希望现在不使用JMS捆绑包这样做;我的序列化看起来像这样:

/**
 * Serialize
 * @return string|void
 */
public function serialize()
{
    return serialize(array(
        'id' => $this->getId(),
        'display_name' => $this->getDisplayName(),
        'email' => $this->getEmail(),
    ));
}

/**
 * Unserialize
 * @return mixed|void
 */
public function unserialize($data)
{
    $data = unserialize($data);
    $this->setId($data['id']);
    $this->setDisplayName($data['display_name']);
    $this->setEmail($data['email']);
    return $this;
}

使用上面的内容我得到一个无限循环重定向。

起初我只序列化了id,但是用户的所有其他属性都不可用。

然后我尝试序列化整个对象($ this),但这给了我xdebug嵌套级别错误1000。

我对如何使用序列化进行身份验证感到有点迷失

1 个答案:

答案 0 :(得分:0)

security.yml

providers:
    users:
        entity: { class: MainBundle:User, property: id }

登录逻辑

$token = new UsernamePasswordToken($user, null, 'secured_area', $user->getRoles());
$this->securityContext->setToken($token);

我从用户实体中取出序列化,也没有实现equatable接口。虽然这是必需的,但仍然没有接口属性:

public function getUsername()
{
    return $this->getId();
}