使用 Laravel 护照注册用户
Registering User with Laravel Passport
我设置了密码授予(它是应用程序的后端)。现在,我可以向 oauth/token
发送 post 请求,它可以在 Postman 上运行。但是,如果我也想从 api 注册用户怎么办?
我知道我可以使用当前的 /register
路由,但是,我是否需要将用户重定向回登录页面并让他使用他的凭据再次登录?
或者在 RegisterController 中,在 registered()
函数中,我应该重定向到 oauth/token
路由吗? (为此,请注意我正在发送 'x-www-form-urlencoded' 中的所有 5 个数据,它似乎有效。但是,我需要在 headers 中分离一些吗?这对我来说很模糊,所以只是想要问我什么时候有机会)。
或者我应该在 oauth/token
方法中添加一些东西,比如 this guy?实际上,我试图在库中的 AccessTokenController@issueToken
方法上捕获 posted $request
数据,但是我不知道如何操作 parsedBody
数组。如果我从实际的图书馆触发我的注册功能,我怎么知道它是注册还是登录?
也许我遗漏了一些信息,但我找不到与此主题相关的任何信息。在 Passport 中处理注册用户的正确方法是什么?
更新: 接受的答案显示 'register' 循环;在它下面我添加了 'login' 和 'refresh token' 实现。希望对您有所帮助:)
在您的 API 中创建路线
Route::post('register','Api\UsersController@create');
并且在 UsersController 中创建方法 create()
function create(Request $request)
{
/**
* Get a validator for an incoming registration request.
*
* @param array $request
* @return \Illuminate\Contracts\Validation\Validator
*/
$valid = validator($request->only('email', 'name', 'password','mobile'), [
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6',
'mobile' => 'required',
]);
if ($valid->fails()) {
$jsonError=response()->json($valid->errors()->all(), 400);
return \Response::json($jsonError);
}
$data = request()->only('email','name','password','mobile');
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
'mobile' => $data['mobile']
]);
// And created user until here.
$client = Client::where('password_client', 1)->first();
// Is this $request the same request? I mean Request $request? Then wouldn't it mess the other $request stuff? Also how did you pass it on the $request in $proxy? Wouldn't Request::create() just create a new thing?
$request->request->add([
'grant_type' => 'password',
'client_id' => $client->id,
'client_secret' => $client->secret,
'username' => $data['email'],
'password' => $data['password'],
'scope' => null,
]);
// Fire off the internal request.
$token = Request::create(
'oauth/token',
'POST'
);
return \Route::dispatch($token);
}
创建新用户后,return 访问令牌。
一年后,我想出了如何实施完整的周期。
@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);
}
}
最近部署 Laravel 6 时阅读本文,我的解决方案如下。
当您遵循 Laravel 的 passport documentation 中定义的步骤并将 HasApiTokens
特征添加到 User
模型时,您可以调用 createToken
在您的用户实体上运行。
此外,在您的 RegisterController
中有一个来自 RegistersUsers
特征的 registered
函数,您可以实现该函数,当用户成功注册时调用。所以你可以按如下方式实现:
protected function registered(Request $request, User $user)
{
$token = $user->createToken('tokenName');
return response()->json([
'user' => $user,
'token' => $token->accessToken,
]);
}
有关注册周期的更多信息,请参阅 RegistersUsers
特征中的 register
函数..
我设置了密码授予(它是应用程序的后端)。现在,我可以向 oauth/token
发送 post 请求,它可以在 Postman 上运行。但是,如果我也想从 api 注册用户怎么办?
我知道我可以使用当前的 /register
路由,但是,我是否需要将用户重定向回登录页面并让他使用他的凭据再次登录?
或者在 RegisterController 中,在 registered()
函数中,我应该重定向到 oauth/token
路由吗? (为此,请注意我正在发送 'x-www-form-urlencoded' 中的所有 5 个数据,它似乎有效。但是,我需要在 headers 中分离一些吗?这对我来说很模糊,所以只是想要问我什么时候有机会)。
或者我应该在 oauth/token
方法中添加一些东西,比如 this guy?实际上,我试图在库中的 AccessTokenController@issueToken
方法上捕获 posted $request
数据,但是我不知道如何操作 parsedBody
数组。如果我从实际的图书馆触发我的注册功能,我怎么知道它是注册还是登录?
也许我遗漏了一些信息,但我找不到与此主题相关的任何信息。在 Passport 中处理注册用户的正确方法是什么?
更新: 接受的答案显示 'register' 循环;在它下面我添加了 'login' 和 'refresh token' 实现。希望对您有所帮助:)
在您的 API 中创建路线
Route::post('register','Api\UsersController@create');
并且在 UsersController 中创建方法 create()
function create(Request $request)
{
/**
* Get a validator for an incoming registration request.
*
* @param array $request
* @return \Illuminate\Contracts\Validation\Validator
*/
$valid = validator($request->only('email', 'name', 'password','mobile'), [
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6',
'mobile' => 'required',
]);
if ($valid->fails()) {
$jsonError=response()->json($valid->errors()->all(), 400);
return \Response::json($jsonError);
}
$data = request()->only('email','name','password','mobile');
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
'mobile' => $data['mobile']
]);
// And created user until here.
$client = Client::where('password_client', 1)->first();
// Is this $request the same request? I mean Request $request? Then wouldn't it mess the other $request stuff? Also how did you pass it on the $request in $proxy? Wouldn't Request::create() just create a new thing?
$request->request->add([
'grant_type' => 'password',
'client_id' => $client->id,
'client_secret' => $client->secret,
'username' => $data['email'],
'password' => $data['password'],
'scope' => null,
]);
// Fire off the internal request.
$token = Request::create(
'oauth/token',
'POST'
);
return \Route::dispatch($token);
}
创建新用户后,return 访问令牌。
一年后,我想出了如何实施完整的周期。
@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);
}
}
最近部署 Laravel 6 时阅读本文,我的解决方案如下。
当您遵循 Laravel 的 passport documentation 中定义的步骤并将 HasApiTokens
特征添加到 User
模型时,您可以调用 createToken
在您的用户实体上运行。
此外,在您的 RegisterController
中有一个来自 RegistersUsers
特征的 registered
函数,您可以实现该函数,当用户成功注册时调用。所以你可以按如下方式实现:
protected function registered(Request $request, User $user)
{
$token = $user->createToken('tokenName');
return response()->json([
'user' => $user,
'token' => $token->accessToken,
]);
}
有关注册周期的更多信息,请参阅 RegistersUsers
特征中的 register
函数..