我的问题是:我有一个立即购买表单,在我重定向到银行的支付页面之前,我需要注册并登录用户。中的所有细节都在引导模式中,我使用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所以永远不要登录...
发布于 2015-08-19 02:08:13
你不应该回显来自一个动作的东西,你需要返回它们。这甚至可能是它无法输出标识cookie的原因(您应该有两个cookie:一个用于会话,一个用于标识)。如果您的日志包含无法发送标头的错误,因为内容已经发送,我不会感到惊讶。
发布于 2015-08-19 14:20:29
我找到了问题的根源。问题出在身份cookie的使用上。在我的User模型中,findIdentity($id)方法有一个额外的过滤器,只允许活动用户登录。
https://stackoverflow.com/questions/32069084
复制相似问题