0

我有一个安装了模块 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;
}
4

1 回答 1

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()
        );
    }
}
于 2014-05-22T09:11:51.097 回答