Php 使用Laravel Passport注册用户
我设置了密码授权(它是应用程序的后端)。现在,我可以将post请求发送到Php 使用Laravel Passport注册用户,php,laravel,oauth,laravel-5.4,laravel-passport,Php,Laravel,Oauth,Laravel 5.4,Laravel Passport,我设置了密码授权(它是应用程序的后端)。现在,我可以将post请求发送到oauth/token,它可以在Postman上工作。但是,如果我也想从api注册用户,该怎么办 我知道我可以使用当前的/register路径,但是,我是否需要将用户重定向回登录页面,然后他使用凭据再次登录 或者在RegisterController中的registered()函数中,我是否应该重定向到oauth/token路由?(为此,请注意,我正在发送“x-www-form-urlencoded”中的所有5个数据,它似乎
oauth/token
,它可以在Postman上工作。但是,如果我也想从api注册用户,该怎么办
我知道我可以使用当前的/register
路径,但是,我是否需要将用户重定向回登录页面,然后他使用凭据再次登录
或者在RegisterController中的registered()
函数中,我是否应该重定向到oauth/token
路由?(为此,请注意,我正在发送“x-www-form-urlencoded”中的所有5个数据,它似乎可以工作。但是,我是否需要在标题中分隔一些数据?这对我来说很模糊,所以只想问一下我什么时候有机会)
或者我应该在oauth/token
方法中添加类似的内容吗?实际上,我试图捕捉上发布的$request
数据AccessTokenController@issueToken
方法,但我不知道如何操作parsedBody
数组。如果我从实际库中触发我的register函数,我怎么知道它是register还是login
也许我遗漏了一些信息,但是我找不到任何基于这个主题的信息。如何正确处理Passport中的注册用户
更新:接受答案显示“注册”周期;在它下面,我添加了“登录”和“刷新令牌”实现。希望有帮助:)在API中创建路由作为
Route::post('register','Api\UsersController@create');
在UsersController中创建方法create()
在创建新用户之后,返回访问令牌。在I年之后,我想出了如何实现整个周期 @Nileshsinh方法显示寄存器周期 下面是登录和刷新令牌部分:
Route::post('auth/token', 'Api\AuthController@authenticate');
Route::post('auth/refresh', 'Api\AuthController@refreshToken');
方法:
class AuthController extends Controller
{
private $client;
/**
* DefaultController constructor.
*/
public function __construct()
{
$this->client = DB::table('oauth_clients')->where('id', 1)->first();
}
/**
* @param Request $request
* @return mixed
*/
protected function authenticate(Request $request)
{
$request->request->add([
'grant_type' => 'password',
'username' => $request->email,
'password' => $request->password,
'client_id' => $this->client->id,
'client_secret' => $this->client->secret,
'scope' => ''
]);
$proxy = Request::create(
'oauth/token',
'POST'
);
return \Route::dispatch($proxy);
}
/**
* @param Request $request
* @return mixed
*/
protected function refreshToken(Request $request)
{
$request->request->add([
'grant_type' => 'refresh_token',
'refresh_token' => $request->refresh_token,
'client_id' => $this->client->id,
'client_secret' => $this->client->secret,
'scope' => ''
]);
$proxy = Request::create(
'oauth/token',
'POST'
);
return \Route::dispatch($proxy);
}
}
在最近部署了Laravel6之后阅读本文,我的解决方案如下 当您遵循了Laravel中定义的步骤,并将
HasApiTokens
特性添加到User
模型中时,您可以对用户实体调用createToken
函数
另外,在您的RegisterController
中,有一个registerusers
特性中的registered
函数,您可以实现该函数,当用户成功注册时会调用该函数。因此,您可以通过以下方式实现此功能:
protected function registered(Request $request, User $user)
{
$token = $user->createToken('tokenName');
return response()->json([
'user' => $user,
'token' => $token->accessToken,
]);
}
有关注册周期的更多信息,请参见
registerUsers
trait中的register
功能。您好,我有两个问题:1
为什么在\u构造
部分获得静态用户id2
我们为什么要刷新令牌?(我的意思是好处是什么?@mafortis-1
-它是应用程序的oauth\u客户端
id。当您使用任何第三方api时,请考虑它。当您注册时,您首先注册您的应用程序以获取API密钥API secret,对吗?(以FaceBook api为例,您可以获得应用程序的凭据)。这里也一样<代码>OAuth客户端就是这样。然而,由于我不想公开我的api,我没有很多oauth客户机,所以我只获取它。否则,(如果我将有许多oauth客户端),那么我将接受应用程序的oauth凭据(api密钥和api机密),并将其作为用户凭据。2
-刷新令牌只是为了安全,因为as令牌是任何用户的“身份验证”,如果其他人有他的令牌,他可以模拟那个用户:)这就是为什么刷新令牌很好:)(大公司会在10分钟后终止令牌)-希望这有帮助:)解释得很好,值得一试:但这似乎生成了一个个人令牌,而不是访问令牌或刷新令牌。这不是问题中所问的密码授予。这个答案确实有效。但它不会检查witch客户端应用程序是否发出请求
protected function registered(Request $request, User $user)
{
$token = $user->createToken('tokenName');
return response()->json([
'user' => $user,
'token' => $token->accessToken,
]);
}