我的问题是:我现在有一个立即购买表格,我需要注册并登录用户才能重定向到银行的付款页面。所有细节都在一个bootstrap模式中,我用jQuery post($.post()
)发送它。
我在Yii2中的用户类:class User extends ActiveRecord implements IdentityInterface
这是注册和登录:
$user = new User();
$user->email = $email;
$user->password = $password;
if($user->save()) {
\Yii::$app->user->login($user, 3600 * 24 * 30)
}
用户创建了,但是如果我重新启动了该页面,它仍然没有登录。\Yii::$app->user->login()
返回true。
我试着在登录前把它放进去:
$session = \Yii::$app->session;
if (!$session->isActive) {
$session->open();
}
但没有帮助。我确定问题是ajax登录但我该怎么办呢?
编辑:
我创建了一个测试:
public function actionLoginTest()
{
$session = \Yii::$app->session;
$session->open();
$user = User::findOne(163);
echo '<pre>';
echo 'logged before login: ' . (int) \Yii::$app->user->getId() . PHP_EOL;
echo 'isGuest before login: ' . (\Yii::$app->user->isGuest ? 'yes' : 'no') . PHP_EOL;
\Yii::$app->user->login($user, 3600 * 24 * 30);
echo 'isGuest after login: ' . (\Yii::$app->user->isGuest ? 'yes' : 'no') . PHP_EOL;
echo 'logged user: ' . \Yii::$app->user->getId();
}
这是每次重新加载时的响应:
logged before login: 0
isGuest before login: yes
isGuest after login: no
logged user: 163
所以永远不要登录......
答案 0 :(得分:1)
你不应该回应一个动作的东西,你需要归还它们。 甚至可能是它无法输出身份cookie的原因(你应该有2个cookie:一个用于会话,一个用于身份)。如果您的日志包含因无法发送内容而无法发送标头的错误,我将不会感到惊讶。
答案 1 :(得分:1)
我找到了问题的根源。问题是身份cookie的使用。在我的User
模型中,findIdentity($id)
方法有一个额外的过滤器,只允许活跃用户登录。