我有一个带有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;
}
答案 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()
);
}
}