workerman应该如何实现授权?

授权设想:

用户在web里登录操作成功后,把token返回给前端。前端建立ws链接时把token传到ws服务器
通过token查询用户信息,绑定用户id,不知道是否合理?

服务端用的是passport,前端通过ws传token应该如何验证获取用户id

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 34

jwt根据相应规则解密就行了啊

1年前 评论

在握手的时候进行验证并绑定用户不就行了嘛?

1年前 评论
臭鼬 (楼主) 1年前

在建立连接的时候验证就行了吧

1年前 评论

我们就比较流氓了,web_api的session驱动直接改成redis,workerman这边拿登录信息直接去redis拿

1年前 评论

绑定uid就行了 文档上面已经说的很清楚了 不要想得太复杂 什么jwt解密这些都没有必要 混乱试听的。

1年前 评论
臭鼬 (楼主) 1年前

两种方式:

  1. 连接成功后发送授权信息进行验证
  2. 通过 ws://xxx.com?token=xxx 传授权参数
1年前 评论
臭鼬 (楼主) 1年前
Neilyozの鱼不浪 1年前
wmhello 1年前
yzbfeng 1年前
wmhello 1年前
yzbfeng 1年前
wmhello 1年前
yzbfeng 1年前
wmhello 1年前
yzbfeng 1年前
wmhello 1年前
wmhello 1年前
臭鼬 (楼主) 1年前
景色铅华 1年前

:sweat_smile:

方式一:我一般直接把workerman当做一个推送工具来用 你是请求层面直接发送到workerman的service了看这个图你可以在laravel请求层面 再去绑定getwayworker (官方推介用法)

方式二: ws://xxx.com?token=xxx 传授权参数 获取到授权参数你再去跑个http请求 请求laravel那边拿这个uid

file

1年前 评论
臭鼬 (楼主) 1年前
ysxpark 1年前
臭鼬 (楼主) 1年前

passport 解码问题这个 链接 看这个能不能解决,
如果不能,可以迂回处理一下,配置一个鉴权接口,通过token获取用户信息,websocket接收到token,去请求这个鉴权接口返回用户信息拿到user_id

1年前 评论
kkokk (作者) 1年前
臭鼬 (楼主) 1年前

你这个场景我之前做直播的时候写过,但是我不明白你这个是什么问题。我没用过passport,如果你的疑问是在workerman里面不能使用passport的话,可以在缓存内建立联系。

1年前 评论

所以你的问题也不是在workerman了,你是不知道如何拿token换uid

1年前 评论
臭鼬 (楼主) 1年前
陈先生

难道正确的情况不是 链接的时候带上token 么? 类似 ws://xxx.com?token=token 后端可以拿到 query 的。直接 auth 就可以了。。。。

1年前 评论
    /**
     * 根据传递的 bearerToken 获取已授权用户id
     *
     * @param $bearerToken
     * @return null
     */
    protected function getAuthUserId($bearerToken)
    {
        $header = data_get(explode('.', $bearerToken), 1);
        $acTokenId = data_get(json_decode(base64_decode($header), true), 'jti');
        $acToken = $acTokenId
            ? Passport::token()->where('client_id', config('admin.client_id'))->where('revoked', false)->find($acTokenId)
            : null;

        if (empty($acToken)) {

            gateway('admin')->closeClient($this->clientId, 'token 无效');
            return;
        }
        if ($this->acTokenExpired($this->acToken)) {

            gateway('admin')->closeClient($this->clientId, 'token 已过期');
            return;
        }

        return $acToken->user_id;
    }
1年前 评论

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