用的 passport,没用 dingo API 的,不知道这样写有没有问题?

为对应用户创建 JWT

 // 为对应用户创建 JWT
        $token = Auth::guard('api')->fromUser($user);

改成下面这样返回也可以吧?

public function weappStore(WeappAuthorizationRequest $request)
    {
        $code = $request->code;

        // 根据 code 获取微信 openid 和 session_key
        $miniProgram = \EasyWeChat::miniProgram();
        $data = $miniProgram->auth->session($code);

        // 如果结果错误,说明 code 已过期或不正确,返回 401 错误
        if (isset($data['errcode'])) {
            return response()->json([
                'status'=>'false',
                'message' => 'code已过期或不正确',
            ],401);
        }

        //找到 openid 对应的用户
        $user = User::where('weapp_openid', $data['openid'])->first();
        //把session_key
        $attributes['weixin_session_key'] = $data['session_key'];

        // 未找到对应用户则需要提交用户名密码进行用户绑定
        if (!$user) {
            // 如果未提交用户名密码,403 错误提示
            $username = $request->username;

            if (!$username) {
                return response()->json([
                    'status'=>'false',
                    'message' => '用户不存在',
                ],403);
            }

            // 用户名可以是邮箱或电话
            filter_var($username, FILTER_VALIDATE_EMAIL) ? $credentials['email'] = $username : $credentials['phone'] = $username;
            $credentials['password'] = $request->password;

            // 验证用户名和密码是否正确
            if (!auth()->attempt($credentials)) {
                return response()->json([
                    'status'=>'false',
                    'message' => '用户名或密码错误',
                ],404);
            }
            // 获取对应的用户
            $user = User::where('phone', $credentials['phone'])->first();
            $attributes['weapp_openid'] = $data['openid'];
        }

        // 更新用户数据
        $user->update($attributes);

        // 为对应用户创建 JWT
        // $token = Auth::guard('api')->fromUser($user);

        // 直接创建token并设置有效期
        $createToken = $user->createToken($user->weapp_openid);

        $createToken->token->expires_at = Carbon::now()->addDays(15);
        $createToken->token->save();

        $token = $user->createToken($user->weapp_openid)->accessToken;

        return response()->json([
           'access_token'=>$token,
            'token_type'=>"Bearer",
            'expires_in' => '21600',
        ],201);

        //        return response()->respondWithToken($token)->setStatusCode(201);
    }
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
liyu001989
最佳答案

你是用的 passport 吗? https://learnku.com/courses/laravel-advanc... 应该按这种方式处理啊

6年前 评论
讨论数量: 1
liyu001989

你是用的 passport 吗? https://learnku.com/courses/laravel-advanc... 应该按这种方式处理啊

6年前 评论

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