Laravel Passport 注册用户凭据不正确
Posted
技术标签:
【中文标题】Laravel Passport 注册用户凭据不正确【英文标题】:Laravel Passport Register the user credentials were incorrect 【发布时间】:2017-12-23 14:13:00 【问题描述】:我设置了 Laravel Passport,目前我正在尝试使用 Post Route 注册用户。我确实在Controllers/Api/Auth
中创建了一个RegisterController
。
因此,我创建了一个客户表,它看起来非常像用户表。 如果我调用路由,就会创建客户端,但我没有获得访问令牌或刷新令牌。
到我的控制器的路由如下所示(路由/api):
Route::post('register', ['as' => 'register', 'uses' => 'Api\Auth\RegisterController@register']);
我的控制器如下所示:
<?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);
这是我的客户端模型:
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'];
当我尝试使用 Postman 调用它时,我收到以下错误消息:
【问题讨论】:
【参考方案1】:我在这里可能不太确定,但由于您的bcrypt('password')
呼叫,您似乎正在使用密码“password”创建您的客户端。
不应该是bcrypt(request('password'))
吗?
这可以解释为什么您的凭据在您的请求中是错误的,因为它们是 ; )
【讨论】:
完全误读了问题,然后误判了你的答案,所以实际上 +1 ? 首先感谢您的回答,我更改了该行并更新了问题中的控制器,但仍然收到相同的错误消息 好的,如果我将客户端更改为用户,这很奇怪,但我不明白为什么会有想法?【参考方案2】:好的,我修好了,如果我使用 User
模型而不是我的 Client
模型,则发布路线有效,所以我猜肯定有一些不同的东西。
经过一番研究,我发现需要添加模型,在我的例子中,客户端模型添加到 config/auth.php
内的 providers 数组中。
所以第一个需要像这样更改 api 保护:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'clients',
],
],
这种api路由登录和注册的方式只对我的客户采取行动。
现在您需要一个新的提供者,在这种情况下需要一个像这样的客户端提供者。
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'clients' => [
'driver' => 'eloquent',
'model' => App\Client::class
],
],
如果我调用路由,我会得到一个访问令牌 + 刷新令牌。
【讨论】:
以上是关于Laravel Passport 注册用户凭据不正确的主要内容,如果未能解决你的问题,请参考以下文章
不断收到 401 未经授权的“无效凭据”Laravel Passport
为啥客户凭证应该与 Laravel Passport 中的用户相关联?
Laravel 5.5 - Laravel Passport 使用正确的授权类型?