J'ai mis en place une autorisation de mot de passe (c'est le backend pour une application). Maintenant, je peux envoyer une demande de publication à oauth/token
Et cela fonctionne sur Postman. Cependant, que se passe-t-il si je souhaite également enregistrer l'utilisateur à partir de l'API?
Je comprends que je peux utiliser l'itinéraire actuel /register
, Est-ce que je devrai ensuite rediriger l'utilisateur vers la page de connexion et il se connectera à nouveau avec ses informations d'identification?
Ou dans RegisterController, dans la fonction registered()
, dois-je rediriger vers la route oauth/token
? (Pour cela, veuillez noter que j'envoie toutes les 5 données dans 'x-www-form-urlencoded' et cela semble fonctionner. Cependant, dois-je en séparer certaines dans les en-têtes? C'est flou pour moi, donc je voulais juste demander quand j'en ai l'occasion).
Ou dois-je ajouter quelque chose dans la méthode oauth/token
Comme ce gars ? En fait, j'ai essayé d'attraper les données $request
Publiées sur la méthode AccessTokenController@issueToken
Dans la bibliothèque, mais je n'ai pas pu comprendre comment manipuler le tableau parsedBody
. Si je déclenche ma fonction d'enregistrement à partir de la bibliothèque actuelle, comment saurais-je s'il s'agit d'un enregistrement ou d'une connexion?
Peut-être que je manque des informations, mais je n'ai rien trouvé sur ce sujet. Quelle est la bonne façon de gérer l'enregistrement de l'utilisateur dans Passport?
Mise à jour: La réponse acceptée montre le cycle 'd'enregistrement'; et en dessous, j'ai ajouté des implémentations de "connexion" et de "rafraîchissement de jeton". J'espère que cela aide :)
Dans votre API, créez l'itinéraire en tant que
Route::post('register','Api\UsersController@create');
Et dans UsersController, créez la méthode 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);
}
Et après avoir créé un nouvel utilisateur, renvoyez le jeton d'accès.
Et après un an, j'ai compris comment mettre en œuvre le cycle complet.
La méthode @Nileshsinh montre le cycle d'enregistrement.
Et voici les pièces de connexion et d'actualisation des jetons:
Route::post('auth/token', 'Api\AuthController@authenticate');
Route::post('auth/refresh', 'Api\AuthController@refreshToken');
Méthodes:
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);
}
}