首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Yii2注册和自动登录

Yii2注册和自动登录
EN

Stack Overflow用户
提问于 2015-08-18 17:51:35
回答 2查看 2K关注 0票数 1

我的问题是:我有一个立即购买表单,在我重定向到银行的支付页面之前,我需要注册并登录用户。中的所有细节都在引导模式中,我使用jQuery post ($.post())发送它。

我在Yii2中的用户类:class User extends ActiveRecord implements IdentityInterface

这里是注册和登录:

代码语言:javascript
复制
$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。

我尝试在登录之前添加以下内容:

代码语言:javascript
复制
$session = \Yii::$app->session;
if (!$session->isActive) {
    $session->open();
}

但没有帮助。我确信问题出在ajax登录上,但是我怎么才能做得对呢?

编辑:

我已经创建了一个测试:

代码语言:javascript
复制
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();
}

这是每次重新加载时的响应:

代码语言:javascript
复制
logged before login: 0
isGuest before login: yes
isGuest after login: no
logged user: 163

所以永远不要登录...

EN

回答 2

Stack Overflow用户

发布于 2015-08-19 02:08:13

你不应该回显来自一个动作的东西,你需要返回它们。这甚至可能是它无法输出标识cookie的原因(您应该有两个cookie:一个用于会话,一个用于标识)。如果您的日志包含无法发送标头的错误,因为内容已经发送,我不会感到惊讶。

票数 1
EN

Stack Overflow用户

发布于 2015-08-19 14:20:29

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32069084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档