3

使用 vagrant/homestead 设置 Laravel 的 5.3 Passport。跟随直到我到达密码授予令牌

在这里,我找到了这个 GuzzleHttp 片段来发帖/oath/token

    Route::get('/api_grant', function(){
    $http = new GuzzleHttp\Client;

    $response = $http->post('http://mavrik-cms.io/oauth/token', [
        'form_params' => [
            'grant_type' => 'password',
            'client_id' => '6',
            'client_secret' => 'BBlhjUlGsbde5zQ3LBHAr6inJoQVFOMIZlR1RFUI',
            'username' => 'mrricki.m.usmc@gmail.com',
            'password' => 'secret',
            'scope' => '',
        ],
    ]);

    return json_decode((string) $response->getBody(), true);
});

尽管我已经发送了所有必需且正确的信息,但我继续收到:(注意:我是唯一的用户,因此它是我的电子邮件和虚拟密码,并且客户端正确关联到我在 oauth 客户端表上的 user_id 并且 password_client 设置为 1 );

{"error":"invalid_credentials","message":"The user credentials were incorrect."}

在此处输入图像描述

我已经搞砸了几个小时了。我已经尝试了用户和密码的所有可能组合。(来自用户模型的电子邮件作为用户名,来自用户模型的用户作为用户名,用户模型中的密码作为密码等)。

4

4 回答 4

3

我遇到了同样的问题,它最终发生了,因为我使用username表中的一个字段而不是 default 进行身份验证email

为了适应这种行为,我不得不findForPassport()在我的User雄辩模型中重写。UserRepositorypassport默认到email

if (method_exists($model, 'findForPassport')) {
    $user = (new $model)->findForPassport($username);
} else {
    $user = (new $model)->where('email', $username)->first();
}

不确定这是否有帮助,但这对我有用。

public static function findForPassport($username)
{
    return User::where('username', $username)->first();
}
于 2017-02-23T18:08:20.337 回答
1

我也面临同样的问题,但我通过 bcrypting 表中用户的密码解决了您可以在此处http://bcrypthashgenerator.apphb.com/在线 bcrypt 密码,然后针对特定用户将密码保存在表中

此外,您还必须在帖子数据的用户名键中传递 emailid(表中“电子邮件”列的值)

于 2017-09-16T10:28:58.700 回答
0

您可以使用类似Hash::make('your_password')or bcrypt('your_password'), bests 之类的东西!;)

于 2016-11-26T00:39:35.827 回答
0

我改变那里的文件

  1. app\Http\Kernel.php 将 'auth' => \App\Http\Middleware\Authenticate::class 更改为此

    'auth' => \Illuminate\Auth\Middleware\Authenticate::class

  2. 将此功能添加到用户类或添加到客户端模式中。

    public static function findForPassport( YOUR PARAMERT ) { return User::where('mobile', YOUR PARAMERT)->first(); }

  3. 我的 Client.php

use Notifiable,HasApiTokens;

protected $fillable = [ 'name', 'mobile', 'email', 'avatar','password','active','enterprise_id' ];

public $timestamps = true;

Protected $hidden = [
    'password', 'remember_token',
];

public static function findForPassport($mobile)
{
    return User::where('mobile', $mobile)->first();
}
  1. 发送令牌后获取用户信息我使用此代码

    $request->user('api');

  2. 像这样在路由中的 api.php 文件中测试你的 api

    Route::get('/user', function (Request $request) { return $request->user('api'); });

如果用户登录,您将获得用户信息

于 2018-12-02T20:47:02.630 回答