hhxsv5 / laravel-s

LaravelS is an out-of-the-box adapter between Laravel/Lumen and Swoole.
MIT License
3.82k stars 470 forks source link

获取不到登录用户信息 #278

Closed jipfqf closed 3 years ago

jipfqf commented 4 years ago

我用的是laravel7,前端用的vue-native-websocket,在web和api路由里面加文档上说的ws路由且加了中间件都不能获取到用户信息,其它配置也都是默认配置,谁能帮我指点下要怎么配置路由,还是其它地方哪需要配置

hhxsv5 commented 4 years ago
/**
* 获取当前登录的用户
* 此特性要求建立WebSocket连接的路径要经过Authenticate之类的中间件。
* 例如:
* 浏览器端:var ws = new WebSocket("ws://127.0.0.1:5200/ws");
* 那么Laravel中/ws路由就需要加上类似Authenticate的中间件。
* Route::get('/ws', function () {
*     // 响应状态码200的任意内容
*     return 'websocket';
* })->middleware(['auth']);
*/
// 在onOpen()中获取用户登录信息
// $user = Auth::user();
// $userId = $user ? $user->id : 0; // 0 表示未登录的访客用户
jipfqf commented 4 years ago
/**
* 获取当前登录的用户
* 此特性要求建立WebSocket连接的路径要经过Authenticate之类的中间件。
* 例如:
* 浏览器端:var ws = new WebSocket("ws://127.0.0.1:5200/ws");
* 那么Laravel中/ws路由就需要加上类似Authenticate的中间件。
* Route::get('/ws', function () {
*     // 响应状态码200的任意内容
*     return 'websocket';
* })->middleware(['auth']);
*/
// 在onOpen()中获取用户登录信息
// $user = Auth::user();
// $userId = $user ? $user->id : 0; // 0 表示未登录的访客用户

这些我都设置了,也都是按文档上设置了,还是获取不到,连接websocket的时候不知道怎么传token,我看文档上也没说要传token,现在就不知道是不是我哪配置的不对,用的laravel7和vue前后端完全分离的结构,不知道这个有没有影响

hhxsv5 commented 4 years ago

前后端分离这种情况,你需要检查建立WebSocket的连接是否带上了SESSIONCookie;如果是跨域,需要设置withCredentials才能带上Cookie

jipfqf commented 4 years ago

确实是没有带cookie,但是我查了很久好像没有查到要怎么带cookie,withCredentials也都是ajax上才有的,laravels后端需要设置什么吗

hhxsv5 commented 4 years ago

带不带跨域Cookie是前端withCredentials控制,后端无需设置。

jipfqf commented 4 years ago

我查了下websocket连接时都没有传withCredentials的选项啊,全是ajax,websocket要怎么设置