Laravel 5 获取密码授权令牌,无需对Laravel passport进行http请求

Laravel 5 获取密码授权令牌,无需对Laravel passport进行http请求,laravel-5,oauth-2.0,laravel-passport,Laravel 5,Oauth 2.0,Laravel Passport,我正在使用Laravel5.4(passport)开发一个RESTAPI 我希望用户在注册时获得访问令牌,而无需发出另一个http请求。 我已经彻底阅读了拉威尔的文件。但是没有直接的方法来获取访问令牌。比如:- $token = $user->getOathToken($user_id); 护照文件 在文档中,它们提供如下内容: $http = new GuzzleHttp\Client; $response = $http->post('http://your-

我正在使用Laravel5.4(passport)开发一个RESTAPI

我希望用户在注册时获得访问令牌,而无需发出另一个http请求。 我已经彻底阅读了拉威尔的文件。但是没有直接的方法来获取访问令牌。比如:-

$token = $user->getOathToken($user_id);
护照文件

在文档中,它们提供如下内容:

    $http = new GuzzleHttp\Client;

    $response = $http->post('http://your-app.com/oauth/token', [
        'form_params' => [
            'grant_type' => 'refresh_token',
            'refresh_token' => 'the-refresh-token',
            'client_id' => 'client-id',
            'client_secret' => 'client-secret',
            'scope' => '',
        ],
    ]);

return json_decode((string) $response->getBody(), true);

我不想发出另一个http请求。有什么办法可以避免吗?

没有一种方法可以做你想做的事情。你可以看看

\Laravel\Passport\Http\Controllers\AccessTokenController@issueToken

这是处理
/oauth/token
路由的控制器方法。并考虑在不作为POST请求的情况下将所需参数传递给它。

没有一种方法可用于执行您想要执行的操作。你可以看看

\Laravel\Passport\Http\Controllers\AccessTokenController@issueToken

这是处理
/oauth/token
路由的控制器方法。然后看看如何在不作为POST请求的情况下将所需参数传递给它。

经过研究,这里有一个类可以完成您正在寻找的工作

使用Laravel\Passport\Http\Controllers\convertsprresponses;
使用League\OAuth2\Server\AuthorizationServer;
使用Zend\Diactoros\Response作为Psr7Response;
使用Zend\Diactoros\ServerRequest;
类令牌提供程序
{
使用转换应答;
/**
*@var AuthorizationServer
*/
私有$authServer;
公共函数构造()
{
$this->authServer=resolve(AuthorizationServer::class);
}
公共函数getToken(字符串$email,字符串$password)
{
$data=[
“授权类型”=>“密码”,
'client_id'=>config('services.passport.client_id'),
'client_secret'=>config('services.passport.client_secret'),
“用户名”=>$email,
“密码”=>$password
];
$request=newserverrequest($data);
$request=$request->withParsedBody($data);
$response=$this->convertress($this->authServer->respondToAccessTokenRequest($request,new Psr7Response));
返回json_decode($response->content())->access_令牌;
}
}

经过研究,这里有一门课可以完成你想要的工作

使用Laravel\Passport\Http\Controllers\convertsprresponses;
使用League\OAuth2\Server\AuthorizationServer;
使用Zend\Diactoros\Response作为Psr7Response;
使用Zend\Diactoros\ServerRequest;
类令牌提供程序
{
使用转换应答;
/**
*@var AuthorizationServer
*/
私有$authServer;
公共函数构造()
{
$this->authServer=resolve(AuthorizationServer::class);
}
公共函数getToken(字符串$email,字符串$password)
{
$data=[
“授权类型”=>“密码”,
'client_id'=>config('services.passport.client_id'),
'client_secret'=>config('services.passport.client_secret'),
“用户名”=>$email,
“密码”=>$password
];
$request=newserverrequest($data);
$request=$request->withParsedBody($data);
$response=$this->convertress($this->authServer->respondToAccessTokenRequest($request,new Psr7Response));
返回json_decode($response->content())->access_令牌;
}
}

提供这种类型的功能是不是很明显,或者我缺少了有关passport工作流的一些信息?不是很明显,passport的设计允许用户为自己生成令牌,用于第三方应用程序,或者在登录第一方应用程序时(使用密码授权)。您可以在身份验证承载头中使用CSRF令牌,对于“本地”请求,本地服务的vuejs前端就是这样进行身份验证的。提供这种类型的功能是不是很明显,或者我缺少有关passport工作流的一些信息?不是真的,passport旨在允许用户为自己生成令牌,用于第三方应用程序,或在登录第一方应用程序时生成令牌(使用密码授权)。您可以在身份验证承载头中使用CSRF令牌,对于“本地”请求,这是本地服务的vuejs前端进行身份验证的方式。