如何让api和web端的登录状态可以共享呢

1. 运行环境

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

laravel5.5

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

PHP 版本:7.1

php-fpm 版本:7.1

3). 当前系统

centos 7.6

4). 业务环境

开发环境

5). 相关软件版本

2. 问题描述?

api 接口使用的是tymon/jwt-auth做的token验证登录
web端还是用的原生的session登录
想实现当调用api接口登录的时候,web端也能同步登录状态(代码在同一个域名下)

3. 您期望得到的结果?

共享登录状态

4. 您实际得到的结果?

我在api接口登录的时候调用Auth::attempt($credentials)或者Auth::login($user)登录,在api接口打印Auth::user()可以获取到用户,但是在web.php下的控制器里获取不到用户

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

直接给api添加web中间件就行了。

1年前 评论
讨论数量: 11

在auth.php 中 修改 guards 的 driver为 jwt 试试

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

直接给api添加web中间件就行了。

1年前 评论

\App\Http\Middleware\EncryptCookies::class, // cookie加密 \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, // 追加在response之前设置的cookie \Illuminate\Session\Middleware\StartSession::class, // 开启session

1年前 评论

如果要 api登录 web也登陆 就要 开启 api 的session 就在 api 登录 route 加入 中间件

api
加入中间件

\Illuminate\Session\Middleware\StartSession::class,

也可以使用别名

然后 对应 api 登录逻辑中 加入 api 和 web 守卫 的登录

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

做不到你说的这个:

想实现当调用 api 接口登录的时候,web 端也能同步登录状态(代码在同一个域名下)

你api登录接口是给软件用的吧,如果是的话:
除非在软件端点击链接跳转到浏览器(携带jwt),浏览器实现自动登录(写自动登录逻辑)。

这种逻辑来实现web的自动登录

1年前 评论
php_yt 1年前
feng_123 (楼主) 1年前

用 cookie 就行 , api 和 web 都走cookie 。我的理解是你的 api 应该是走了 js 从 localstorage 。 我的 gooseforum.online 就是走的cookie, api登陆的时候也是返回设置cookie, 前后分离的接口和web都可以验证登陆态

1年前 评论

骚操作来了,

加个中间件,判断是否登录,没有登录就验证去登录

jwt 请求(携带cookie) -》 中间件判断web 是否登录,没有 接登录

web 请求(携带cookie, jwt 如有) -> 不带jwt,生成新的

// ajax 或放到网页中, 让js 读取
ajax:   ['code' => 0, 'data' => 'xxx',  'jwt' => xxxx],  js 通用函数接受处理
网页: var jwt = {xxx};   如保存到 localStorage,用的时候读取

jQuery.ajaxSetup() // 设置jwt请求头
$(document).ajaxSuccess(function() {}); // 处理jwt 响应,以备后续使用
1年前 评论

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