ZF2 ZfcUser强制登录

时间:2013-12-10 10:17:22

标签: zend-framework2 php-5.3 zfcuser

我有一个带有ZfcUser模块的ZF2。

注册和登录表单工作正常。我制作了一个自定义模块来连接到Linkedin并获取用户的信息,然后在数据库中注册用户数据。

注册部分已完成,但我面临的问题是我需要使用数据库中的数据登录用户(我拥有关于用户的所有信息,因此我知道应该登录哪个用户),但我找不到一种方法让ZfcUser使用PHP而不是登录表单登录特定用户。

我不熟悉适配器和\ Zend \ Authentication。我将不胜感激任何帮助或指示。

我试着查看ZfcUser控制器中的登录程序,但是让我感到困惑的是帮助我。

我也尝试在谷歌寻找答案,但我没有发现这个话题。

如果可能的话,我希望“强制登录程序”不在ZfcUser模块之外。

在看了几个小时的ZfcUser控制器后,我设法建立了一个方法来做我想要的事情

/**
* Change the currently logged user
* @param integer $user_id
*/
public function setLoggedUser($user_id) {
 $storage = new \Zend\Session\Container('Zend_Auth');
 $storage->storage = $user_id;
}

1 个答案:

答案 0 :(得分:3)

直接在存储上设置用户ID有一些缺点。如果您使用其他存储引擎,它(显然)将无法工作。在ZFCUser的AuthService上注册的事件将不会被执行。

我会使用自定义身份验证适配器来解决此问题。可以通过以下方式从控制器调用此适配器:

$this->zfcUserAuthentication()->getAuthService()->authenticate(new ForceLogin($user));

实施如下:

class ForceLogin implements Zend\Authentication\Adapter\AdapterInterface
{
    /**
     * @var UserInterface
     */
    protected $user;

    /**
     * @param $user
     */
    function __construct($user)
    {
        $this->user = $user;
    }

    public function authenticate()
    {
        return new Zend\Authentication\Result(
            Result::SUCCESS,
            $this->getUser()->getId()
        );
    }
}