Laravel API 注册

Joh*_*ohn 1 php oauth-2.0 laravel

我正在开发一个 laravel 后端来使用 Vue JS,并尝试实现用户注册。我已下载通行证以验证用户身份,但我无法准确了解新用户如何注册该网站。

从我所做的研究来看,您似乎希望为无需使用 Laravel 护照即可访问的注册创建路由,然后在创建用户后为其授予令牌。

一旦用户注册,我会使用个人授权令牌,隐式,还是使用护照 CreateFreshApiToken 中间件。

我应该将所有路由放在 web 还是 api 路由文件中?

Ste*_*one 6

您可以在您的 api 中创建一个任何人都可以注册新用户的路由,因此您不使用任何身份验证中间件,例如:

Route::post('users', 'AuthController@register'); // Signup
Run Code Online (Sandbox Code Playgroud)

并在您的控制器中使用相关方法:

/**
 * API Register
 *
 * @param Request $request
 * @return \Illuminate\Http\JsonResponse
 */
public function register(Request $request)
{
    $rules = [
        'name' => 'unique:users|required',
        'email'    => 'unique:users|required',
        'password' => 'required',
    ];

    $input     = $request->only('name', 'email','password');
    $validator = Validator::make($input, $rules);

    if ($validator->fails()) {
        return response()->json(['success' => false, 'error' => $validator->messages()]);
    }
    $name = $request->name;
    $email    = $request->email;
    $password = $request->password;
    $user     = User::create(['name' => $name, 'email' => $email, 'password' => Hash::make($password)]);

}
Run Code Online (Sandbox Code Playgroud)

从这一点来看,您选择的护照 OAuth2 授权代码流的类型将影响您在消费者应用程序上的实现。

您可以选择经典的 OAuth2 流程,基本上您有以下步骤:

  1. 将消费者应用程序注册到 OAuth2 服务器并获取 Client Id 和 Secret

  2. 消费者应用程序使用 Client Id 和 Secret 向 OAuth2 服务器请求授权代码

  3. 获得授权码后,消费者应用程序现在可以向 OAuth2 服务器请求访问令牌
  4. 消费者应用程序现在可以在对服务器的每个请求中使用其在标头请求中发送的访问令牌来访问 Api。

显然,上面的每一步都是一个 HTTP 请求,你如何做取决于你在消费者应用程序中使用的技术。

例如在 php 中,您可以使用 Guzzle 并发送这样的访问令牌请求:

 $http = new \GuzzleHttp\Client;

    $response = $http->post('http://yourserver.com/oauth/token', [
        'form_params' => [
              'grant_type' => 'authorization_code',
              'client_id' => 'client-id',
              'client_secret' => 'client-secret',
              'redirect_uri' => 'http://example.com/callback',
              'code' => $request->code,
        ],
    ]);
Run Code Online (Sandbox Code Playgroud)

另一方面,您可能希望使用更简单的方法来检索访问令牌,避免使用Laravel 护照个人访问令牌的所有授权代码请求等。通过这种方式,您只需执行以下操作即可为用户颁发访问令牌:

$user = App\User::find(1);

// Creating a token without scopes...
$token = $user->createToken('Token Name')->accessToken;
Run Code Online (Sandbox Code Playgroud)

我鼓励您查看 Passport Laravel 文档并检查提供的所有可能性。