web-dev-qa-db-fra.com

Enregistrement de l'utilisateur avec Laravel Passport

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 :)

15
senty

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.

13
Nileshsinh Rathod

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);
    }
}
6
senty