使用Laravel passport oauth/token发送更多数据

joa*_*uer 6 php oauth laravel laravel-passport

所以,我正在使用Laravel + Passport,到目前为止工作正常.

但是,我想对护照代码进行一些小改动(好吧,不是在供应商文件夹中,我希望),一旦我要求用户更改密码,以防他第一次登录.

那么,我需要的是两件事(我相信):

1 - 如何在oauth/token响应中再添加一个信息?与access_token一起,我想从DB中添加一个需要NewPassword = true/false的列.

2 - 如果needsNewPassword为true,则应用程序将重定向到另一个屏幕,用户将在该屏幕上设置新密码.我将设置新密码,删除needsNewPassword的标志并向用户发回新的access_token.然后,用户将仅使用该access_token.如何重新生成新的access_token?

谢谢你的帮助!若昂

joa*_*uer 8

对,

我回答了我自己的问题,以防有人需要这样做.也许不是最好的方式,但是正在发挥作用.我做的是:

  • 创建一个新的路由,比如/ api/login指向一个方法(确保在你的中间件之外"auth",一旦它没有在你的调用中发送令牌).例如:Route::post('/login', 'Auth\LoginController@apiLogin');
  • 在该方法中,您对oauth/token执行请求,并在结果中添加所需的字段.测试

    function apiLogin(Request $request) {
        $tokenRequest = $request->create('/oauth/token', 'POST', $request->all());
        $request->request->add([
           "client_id"     => 'your_client_id',
           "client_secret" => 'your_client_secret',
           "grant_type"    => 'password',
           "code"          => '*',
        ]);
    
        $response = Route::dispatch($tokenRequest);
        $json = (array) json_decode($response->getContent());
        $json['new_value'] = '123456';
        $response->setContent(json_encode($json));
        return $response
    }
    
    Run Code Online (Sandbox Code Playgroud)

    这对我有用.在我的情况下,我也只有一个应用程序,所以我的client_id,client_secret,grant_type和代码都添加到服务器端.客户端只需要传递用户名(或电子邮件,取决于您使用的是什么)和密码,然后它将获得access_token和我想要发送的其他信息.希望这也有助于其他人.

干杯,joao