(已解决)CMS更新用户信息失败

1. 运行环境

lnmp

1). 当前使用的 Laravel 版本?

laravel 8

2). 当前使用的 php/php-fpm 版本?

PHP 版本:7.4

3). 当前系统

Ubuntu 20.4

4). 业务环境

开发环境

2. 问题描述?

客户端代码:

  public function casLogin(Request $request)
    {
        $cas = app('cas');
        $url = env('CAS_LOGIN_URL');
        try {
            if ($cas->checkAuthentication()) {
                $cas_user = $cas->getAttributes();
                $uid = $cas_user['uid'];
                $url = '登录逻辑';
            }
            return redirect()->to($url);
        } catch (\Exception $e) {
            Log::debug($e->getMessage());
            return redirect()->to(env('CAS_SYSTEM_LOGIN'));
        }
    }

当前问题是$cas->getAttributes() 获取不到最新用户的信息,A用户登录,跳转到业务系统获取到A用户信息,当服务端切换B用户登录,在客户端$cas->getAttributes() 获取到的还是A用户的信息,$cas->renewAuthentication() 也试过了,依然解决不了问题

3. 您期望得到的结果?

能够同步用户信息

码上有钱
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案

2个问题

  1. 不应该从 env() 方法中取配置,应该把 env 的直放到 config 文件中,具体原因自己去搜
  2. 目测前后端交互是 Session 机制,建议你这里改成 SSO 共享 Session ,即通过 url 地址判断应该返回用户的哪个信息,一次登录可以多个系统通行。如果不想做 SSO,就需要在 app/config/session.php 中做 Session 隔离

当然还有个更简单的方法:让前端登录 A 地址后,用浏览器「无痕模式」登录 B。

1年前 评论
Mr_Choi (楼主) 1年前
讨论数量: 3

2个问题

  1. 不应该从 env() 方法中取配置,应该把 env 的直放到 config 文件中,具体原因自己去搜
  2. 目测前后端交互是 Session 机制,建议你这里改成 SSO 共享 Session ,即通过 url 地址判断应该返回用户的哪个信息,一次登录可以多个系统通行。如果不想做 SSO,就需要在 app/config/session.php 中做 Session 隔离

当然还有个更简单的方法:让前端登录 A 地址后,用浏览器「无痕模式」登录 B。

1年前 评论
Mr_Choi (楼主) 1年前

env 会读生成缓存, dev模式是最新。

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!