页面重定向后 Yii2 用户身份丢失

2024-02-28

我正在 yii2 中进行用户登录,但不是使用活动记录,而是由另一台服务器处理用户用户名和密码的验证。因此,以下是我所做的解决方法:

in LoginForm.php,我做了一些改变validatePassword() which apiRest()是我用来向负责验证的远程服务器发送请求的方法。

if (!$this->hasErrors()) {

    $json = '{
            "username": "' . $this->username . '",
            "password": "' . $this->password . '"
            }';
    $response = $this->apiRest("POST", "104.130.126.68:3000/api/users/login", $json);

    $user = $this->getUser();

    if(!$user || isset($response['error'])) {
        $this->addError($attribute, $response['error']['message']);
    }

    if(isset($response['data'])) {
        $user->id = $response['data']['userId'];
        $user->username = $this->username;
        $user->ttl = $response['data']['ttl'];
        $user->created = $response['data']['created'];
        $user->accessToken = $response['data']['id'];
    }
}

并且在LoginForm.php/getUser(),我也做了一些修改:

if ($this->_user === false) {
    $this->_user = User::createNewUser();
}

return $this->_user;

在哪里User.php I have:

public static function createNewUser()
{
    $user = [
        'id' => '',
        'username' => '',
        'ttl' => '',
        'created' => '',
        'accessToken' => '',
    ];
    return new static($user);
}

一切看起来都很好,我还可以打印出用户身份SiteController.php/actionLogin():

if ($model->load(Yii::$app->request->post()) && $model->login()) {
    print('<pre>');
    print_r(Yii::$app->user->identity->username);
    die();
    return $this->redirect(['set/index']);
} else {
    $this->layout = "plain";
    return $this->render('login', [
        'model' => $model,
    ]);
}

但问题是,页面重定向后,用户身份就消失了;里面什么都没有Yii::$app->user->identity。我错过了什么吗?请帮我。


嗯,验证看起来不错,但是你这样做

if(isset($response['data'])) {
        $user->id = $response['data']['userId'];
        $user->username = $this->username;
        $user->ttl = $response['data']['ttl'];
        $user->created = $response['data']['created'];
        $user->accessToken = $response['data']['id'];
    }

但你永远不会将用户设置回模型。我相信你最后应该有

$this->_user = $user;

您的登录名可能如下所示

/**
 * Logs in a user using the provided username and password.
 *
 * @return boolean whether the user is logged in successfully
 */
public function login()
{
    if ($this->validate()) {
        return $this->getUser()->login($this->rememberMe ? 2592000 : 0);
    } else {
        return false;
    }
}

getUser 将再次返回任何内容(它将返回您创建的空用户),因为您从未实际设置过它。

还有 deacs 所说的,我希望这是不言而喻的:)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

页面重定向后 Yii2 用户身份丢失 的相关文章

  • 通过身份验证保护 CodeIgniter 2 应用程序的正确方法是什么?

    I have Ion Auth http benedmunds com ion auth 正确安装并在我的服务器上运行 我也有默认的代码点火器2 新闻 教程在同一个 CI 安装中工作 我只是在玩 并对使用身份验证系统 封闭 或保护整个应用程
  • 为什么这评估为 true

    为什么这评估结果为真
  • 使用 MYSQL 将 h:mm pm/am 时间格式插入数据库

    我正在尝试将以 h mm am pm 格式写入的时间插入到存储为标准 DATETIME 格式 hh mm ss 的数据库中 但我不知道如何将发布的时间转换为标准格式所以数据库会接受它 这是我到目前为止一直在尝试的 title POST in
  • Node.js 和 Passport 对象没有 validPassword 方法

    我正在使用 Node js Express Passport 创建一个简单的身份验证 本地 到目前为止我所达到的效果是 当输入错误的用户名或密码时 用户将被重定向到错误页面 但是当用户输入正确的用户名和密码时 我收到此错误 node mod
  • 如何将图像从 Android 应用程序上传到网络服务器的特定文件夹中

    如何将图像从 android 移动到 Web 服务器上的指定文件夹 这是我的安卓代码 package com example bitmaptest import java io ByteArrayOutputStream import ja
  • 如何让Apache服务index.php而不是index.html?

    如果我将以下行放入index html文件 使 Apache 包含index php file 参观index html页面向我显示了这个 这是为什么 为什么它实际上不包含 PHP 文件 正如其他人指出的那样 您很可能没有 html设置为处
  • php源代码到PO文件生成器

    我必须将我的所有回显 打印字符串转换为PHP源代码代码文件到PO file 为了语言翻译 有批次吗对流器可用于相同的 我如何做到这一点 make gettext在您的服务器上运行 setup a 翻译适配器 例如带有 gettext 适配器
  • Google Cloud SQL 上的故障转移如何运作?

    我打算将 PHP 应用程序 从 Google Cloud Platform 外部的服务器 连接到 Google Cloud SQL 我想知道如何设计应用程序以正确地对其数据库进行故障转移 根据manual https cloud googl
  • 如何在HTML中的PHP中注释掉HTML和PHP?

    这是我想注释掉的一行代码 h1 class post title a href title a h1 一种流行的注释方法是分别注释 html 和 php 有一个更好的方法吗
  • 获取字符串中的最后一个整数

    我需要隔离包含多个整数的字符串中最新出现的整数 我怎样才能得到23代替1 for lastnum1 text 1 out of 23 lastnum1 this gt getEval eregi replace out of text 你可
  • 通过 URL 指定控制器类与为每个控制器编写一个脚本相比,有何优缺点?

    今年夏天我安装了两个不同的 PHP 系统 每个都使用两种不同的方法 方法 1 每个任务一个 PHP 文件 该方法需要一个PHP为每个主要任务创建文件 例如 我的上传脚本可以通过http www domain com upload php O
  • PHP 扩展开发入门 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 请推荐有关 PHP 低 级 modules 编程接口的帮助文章或教程 搜索我的书签 我发现的唯一链接是
  • 如何在 Zend MVC 中实现 SSL

    我之前已经通过使用特定的安全文件夹 例如服务器上的 https 文件夹与 http 文件夹 实现了安全页面 我已经开始使用 Zend Framework 并希望应用程序的某些部分 例如登录 使用 https 我在谷歌上搜索过 甚至在这里搜索
  • 如何在 phalcon 框架中同时连接多个数据库在模型类中同时使用两个而不仅仅是一个

    在我的代码中我有两个数据库ABC and XYZ 我想在同一模型中使用两个数据库 而不是 phalcon 中的解决方案是什么 如何为此实现多个数据库连接 one
  • 如何删除文件

    我们有一个脚本 scripts ourscript php和一个文件 media movie1 flv 当我们运行时 我们如何删除这个文件ourscript php Using unlink http php net manual en f
  • 从所有会话中注销

    我有一个注销选项 这是我的代码 session start session destroy setcookie key time 60 60 24 setcookie username time 60 60 24 我想添加另一个选项来注销所
  • Stream_context_set_params 不适用于 ssh2.sftp 包装器

    我想使用类似的功能here http www php net manual en function stream notification callback php 请检查以下代码 function notify notification
  • phpActiveRecord 日期时间格式不正确

    当尝试使用 phpActiveRecord 在表中创建记录时 出现以下错误 Invalid datetime format 1292 Incorrect datetime value 2013 06 20 11 59 08 PDT for
  • PHP递归遍历对象树[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 JSF 中实现登录过滤器?

    即使用户知道某些页面的网址 我也想阻止某些页面的访问 例如 localhost 8080 user home xhtml 需要先登录 如果没有登录则重定向到 index xhtml 在 JSF 中如何做到这一点 我在谷歌上看到需要一个过滤器

随机推荐

  • 将整体 bar 和 perc 标签添加到 geom_bar

    我正在寻找以下问题的解决方案 我有包含两个因子变量的数据EDU and LEVEL 可重现的数据样本在这里 structure list EDU structure c 3L 1L 2L 2L 3L 2L 3L 2L 3L 1L 1L 1L
  • Conda - 无法完全删除环境

    我使用的是 Windows 10 所有命令都以管理员身份运行 我创建了一个名为 myenv 的环境 然后我用了 conda env 删除 n myenv 现在 如果我尝试 康达信息 envs 我只看到基础环境 但是 如果我尝试 conda
  • BigQuery/以太坊数据集 - 如何编写代码

    对于以太坊数据集 如果我知道特定合约的上个月交易 任何人都可以告诉我应该如何在 BigQuery 中编写 例如 如果我想知道合约地址 0x41dbecc1cdc5517c6f76f6a6e836adbee2754de3 上个月进行了多少笔交
  • 如何使用 qt5(QtQuick 2.1) 及更高版本在窗口上打印度数符号

    当我使用 qt4 8 qt fast 1 1 进行 gui 时 我可以成功地打印学位 260但是当升级到 qt5 及更高版本时 它就停止工作了 我在网上搜索 发现了很多相关链接 例如 http www fileformat info inf
  • TOD 时钟时间为 java.util.Date 或毫秒

    我有一个数据库表 其中填充了通过 ETL 来自大型机的数据 该表的一列称为 TOD 如 Time Of Day 中的 TOD 该列存储诸如以下的值 CAE7631DC43DC686 CAE7631C4AC6DC0B CAE6216DF2BC
  • 如何通过 JDBC 使用 Windows 密钥库 (MCS)?

    我正在尝试创建一个使用java应用程序PKI用于身份验证 我需要能够从 Microsoft 证书存储 MCS 检索证书并将其传递到 Oracle 数据库 11 2 我正在使用jdbc oracle thin司机 在谷歌上花了相当长的时间后
  • 有没有办法拆分/分解 Gradle 构建的公共部分

    我们有几个独立的构建 每个独立构建都是一个多项目构建 主要构建脚本变得相当大 因为我们有一组由子项目重用的常见任务 独立构建之间也存在大量重复 我们正在寻找的是 一种分割主构建文件的方法 分成较小的文件 重用某些部分的方法 在其他独立构建中
  • HTML5 / Javascript - DataURL 到 Blob 和 Blob 到 DataURL

    我有一个来自画布的 DataURL 显示了我的网络摄像头 我使用 Matt 的答案将此 dataURL 转换为 blob 如何在javascript中将dataURL转换为文件对象 https stackoverflow com quest
  • 如何显示Eclipse的隐藏工具栏

    Eclipse 有一个上下文菜单项来隐藏 RCP 的整个工具栏 显示隐藏工具栏的相应菜单项在哪里 我知道如果使用新的工作区应该显示它 不过我希望在eclipse的GUI中找到相关的功能 使用 窗口 菜单 那里有一个 显示工具栏 选项
  • fputcsv 将 HTML 代码插入 csv 文件

    我在使用 fputcsv 写入 csv 文件时遇到问题 它将页面 html 也放入 csv 文件中 我的代码有什么问题吗 Excel header header Content Disposition attachment filename
  • 如何使用 Statsmodels.api 获取回归截距

    我正在尝试使用 python 库计算回归输出 但在使用该库时无法获取截距值 import statsmodels api as sm 它打印除截距之外的所有回归分析 但是当我使用时 from pandas stats api import
  • Facebook 发送对话框:在描述中添加换行符

    这是我必须向我的应用程序发送邀请的 URL https www facebook com dialog send app id MY APP ID name hola link http www aWebSite com picture h
  • 带有路径点的 Google 地图 Intent 的 URI

    我想添加到我的应用程序中打开超过 2 个点的 Google 地图应用程序的功能 但我只能设置起点和终点 如何添加航点 我已经尝试过 uri 中所述https stackoverflow com a 13565504 3626048 http
  • C# - 如何按彩虹顺序排列颜色列表?

    从图像列表中 我使用一种方法计算了平均颜色与此类似 https stackoverflow com a 1068399 7918485 我现在有一个清单System Drawing Color 但我不知道如何以看起来像彩虹的方式对它们进行排
  • 使用循环在 Gnuplot 中生成绘图

    我想使用 Gnuplot 生成几个图 这就是我需要使用循环的原因 数据从文件 sort i dat 加载 代码如下所示 但不起作用 我的主循环有一些问题 我不知道为什么它不起作用 也许它与我的 Gnuplot 版本有关 谢谢 do for
  • 滑动效果就像三星打电话和发消息一样[重复]

    这个问题在这里已经有答案了 我需要在列表视图中实现滑动 就像在三星 Android 设备中一样 在通话记录中 当我们从左向右滑动时 正在放置呼叫 从右向左滑动则放置消息 使用 swipeListView 可以吗滑动列表查看演示 https
  • 如何在 Eigen 中初始化 SparseVector

    如何在 Eigen 中初始化 SparseVector 下面的代码 define EIGEN YES I KNOW SPARSE MODULE IS NOT STABLE YET include
  • 关联数组中的双索引

    我正在使用 Node js 构建服务器 我将代表用户的对象存储在关联数组中 现在这些对象的索引就是该连接的套接字 ID 使用 Socket io 库 我通过简单地执行 socket id 来获取它 因此对于处理我的请求的每个处理程序 我始终
  • Spring Boot、Spring-Security - 新的基于组件的安全配置中的 BcrypPasswordEncoder

    我正在尝试使用新的基于组件 不带 WebSecurityConfigurerAdapter 配置并设置我的安全配置 如下所示 安全配置 java 文件 package com tito userservice security import
  • 页面重定向后 Yii2 用户身份丢失

    我正在 yii2 中进行用户登录 但不是使用活动记录 而是由另一台服务器处理用户用户名和密码的验证 因此 以下是我所做的解决方法 in LoginForm php 我做了一些改变validatePassword which apiRest