Laravel Passport API регистрация новых пользователей

Я пытаюсь создать систему входа в свое веб-приложение, но не могу заставить работать Passport. Приложение построено как REST API, поэтому пользователи должны иметь возможность регистрироваться, используя адрес электронной почты и пароль, и после этого они должны иметь возможность входить в систему с этими учетными данными (поэтому я думаю, что им нужно будет получить токен доступа от Passport, когда учетные данные верны).

Я думал, что могу просто сделать сообщение JSON для маршрута «регистрации», чтобы зарегистрировать нового пользователя, а затем сделать сообщение для маршрута «входа в систему», чтобы вернуть токен доступа клиенту, но такой вещи нет. Я могу сказать.

Как мне зарегистрировать нового пользователя?


person kajdehoop    schedule 14.05.2018    source источник


Ответы (2)


Если вы создаете SPA и используете регистрацию Laravel по умолчанию, войдите, забыли пароль и сбросьте пароль, такие веб-функции, как учетная запись Google для целей аутентификации и авторизации вы можете переопределить зарегистрированный метод на App\Http\Controllers\Auth\RegisterController.php с помощью логики перенаправления, если существует предполагаемый URL-адрес.

Эти строки говорят Laravel просмотреть предполагаемый URL-адрес до перехода к пути перенаправления контроллера веб-регистра.

   /**
     * The user has been registered.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  mixed  $user
     * @return mixed
     */
    protected function registered(Request $request, $user)
    {
        if ($request->session()->has('url.intended')) {
            return redirect()->intended();
        }
    }

Например, я использую код авторизации с грантом PKCE на моем Vue.js SFC.

<template>
  <v-app-bar app flat>
    <button-login @login="authorize"></button-login>

    <span>|</span>

    <button-register @register="authorize"></button-register>
  </v-app-bar>
</template>

<script>
import ButtonLogin from '@/components/Buttons/ButtonLogin'
import ButtonRegister from '@/components/Buttons/ButtonRegister'
import { base64URL, encrypt, hashMake, randomString } from '@/helpers'
import sha256 from 'crypto-js/sha256'
import httpBuildQuery from 'http-build-query'
import { SERVICE } from '@/config/services'
import { STORAGE_API_AUTHORIZATION_STATE, STORAGE_API_CODE_VERIFIER } from '@/config/storage'

export default {
  name: 'AppBar',

  components: {
    ButtonLogin,
    ButtonRegister
  },

  authorize() {
      const authorizationState = randomString(40)

      const codeVerifier = randomString(128)

      const codeChallenge = base64URL(sha256(codeVerifier))

      const query = httpBuildQuery({
        client_id: SERVICE.CLIENT_ID,
        redirect_uri: authorizationURL,
        response_type: 'code',
        scope: '*',
        state: authorizationState,
        code_challenge: codeChallenge,
        code_challenge_method: 'S256'
      })

      localStorage.setItem(
        STORAGE_API_AUTHORIZATION_STATE,
        hashMake(authorizationState)
      )

      localStorage.setItem(
        STORAGE_API_CODE_VERIFIER,
        encrypt(codeVerifier, authorizationState)
      )

      location.href = `${SERVICE.API_URL}/oauth/authorize?${query}`
    }
}
</script>

Всякий раз, когда пользователь нажимает кнопку входа / регистрации в моем SPA, он перенаправляет на мою страницу авторизации API OAuth.

Промежуточное ПО для аутентификации перехватит запрос и проверит состояние входа пользователя в систему. Если пользователь не прошел аутентификацию, оно перенаправит пользователя на страницу входа.

Если пользователь решит зарегистрировать свою учетную запись, нажав кнопку регистрации, мы перенаправим пользователя на страницу веб-регистрации (все еще на API, а не на SPA).

После регистрации пользователя контроллер вызовет зарегистрированный метод и проверит наличие предполагаемого URL-адреса, если он существует, мы можем перенаправить пользователя на предполагаемый URL-адрес (конечную точку oauth/authorize), и процесс авторизации может быть продолжен после процесса регистрации.

person yoelpc4    schedule 22.12.2020

Здесь я столкнулся с той же проблемой, и к настоящему времени лучшее решение, которое я нашел, - это создать метод регистрации вручную, создав UserController и метод хранилища, подобный этому

public function store(Request $request) {
    $data=$request->only('name', 'email','password');
            $valid = validator(
                    $data, [
                'name' => 'required|string|max:255',',
                'email' => 'required|string|email|max:155|unique:users',
                'password' => 'required|string|min:4',
            ]);

            $return=null;
            if ($valid->fails()) {
                $return = response()->json($valid->errors()->all(), 400);

            }else{
                $data['password']=Hash::make($data['password']);
                #return = User::create($data);
            }        
            return $return;
}
person judasane    schedule 22.05.2018