Yii2注册并自动登录

时间:2015-08-18 09:51:35

标签: php yii2

我的问题是:我现在有一个立即购买表格,我需要注册并登录用户才能重定向到银行的付款页面。所有细节都在一个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

所以永远不要登录......

2 个答案:

答案 0 :(得分:1)

你不应该回应一个动作的东西,你需要归还它们。 甚至可能是它无法输出身份cookie的原因(你应该有2个cookie:一个用于会话,一个用于身份)。如果您的日志包含因无法发送内容而无法发送标头的错误,我将不会感到惊讶。

答案 1 :(得分:1)

我找到了问题的根源。问题是身份cookie的使用。在我的User模型中,findIdentity($id)方法有一个额外的过滤器,只允许活跃用户登录。