Laravel Passport注册用户凭据不正确

utd*_*dev 5 api laravel postman laravel-passport

我设置了Laravel Passport,目前我正在尝试使用Post Route注册用户.我确实创造了一个RegisterController内部Controllers/Api/Auth.

因此,我创建了一个客户端表,看起来像用户表一样兴奋.如果我调用路由,则会创建客户端,但是我没有获得访问令牌或刷新令牌.

到我的控制器的路径如下(routes/api):

Route::post('register', ['as' => 'register', 'uses' => 'Api\Auth\RegisterController@register']);
Run Code Online (Sandbox Code Playgroud)

我的控制器看起来像这样:

<?php

namespace App\Http\Controllers\Api\Auth;


use App\Client;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Route;
use Laravel\Passport\Client as PClient;

use Illuminate\Http\Request;

class RegisterController extends Controller
{
    private $client;

    public function __construct() {
        $this->client = PClient::find(1);
    }

    public function register(Request $request)
    {
        $this->validate($request, [
            'name' => 'required',
            'email' => 'required|email|unique:users,email',
            'password' => 'required|min:6|confirmed'
        ]);

        $client_user = Client::create([
            'name' => request('name'),
            'email' => request('email'),
            'password' => bcrypt(request('password'))
        ]);

        $params = [
            'grant_type' => 'password',
            'client_id' => $this->client->id,
            'client_secret' => $this->client->secret,
            'username' => request('email'),
            'password' => request('password'),
            'scope' => '*'
        ];

        $request->request->add($params);
        $proxy = Request::create('oauth/token', 'POST');
        return Route::dispatch($proxy);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的客户端模型:

class Client extends Model implements AuthenticatableContract,
                                      AuthorizableContract,
                                      CanResetPasswordContract
{
    use Authenticatable, Authorizable, CanResetPassword, HasApiTokens, Notifiable;

    protected $table = 'clients';

    protected $fillable = ['name', 'email', 'password'];

    protected $hidden = ['password', 'remember_token'];
Run Code Online (Sandbox Code Playgroud)

当我试图用Postman调用它时,我收到此错误消息: 在此输入图像描述

小智 5

我可能会离开这里,但看起来你打算使用密码"密码"来创建你的客户端bcrypt('password').

不应该bcrypt(request('password'))吗?

这可以解释为什么您的凭据在您的请求中是错误的,因为它们是; )


utd*_*dev 3

User好吧,我修复了它,如果我使用模型而不是我的模型,则后路由有效Client,所以我猜一定有不同的东西。

经过一番研究后,我发现需要添加模型,在我的例子中,将客户端模型添加到内部的providers数组中config/auth.php。

因此,第一个需要像这样更改 api 防护:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'passport',
        'provider' => 'clients',
    ],
],
Run Code Online (Sandbox Code Playgroud)

这种 api 路由登录和注册的方式仅对我的客户采取行动。

现在您需要一个新的提供商(在本例中是这样的客户提供商)。

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
    'clients' => [
        'driver' => 'eloquent',
        'model' => App\Client::class
    ],
],
Run Code Online (Sandbox Code Playgroud)

瞧,如果我调用该路由,我会得到一个访问令牌+刷新令牌。