如何使用Laravel Passport(5.3)

时间:2017-11-03 16:38:11

标签: php laravel authentication laravel-passport thephpleague

我们有一个Web应用程序通过Ang 1.6.5前端使用Laravel REST API后端。

我希望记录3种不同的身份验证请求结果: 1.成功的身份验证。 2.有效的用户帐户,无效的密码。 3.无效的用户帐户。

我似乎无法弄清楚如何进入Passport的身份验证过程。

我尝试过一些自定义中间件,也是一个自定义提供商。虽然可能是实施,但两者都没有奏效。

这里的正确方法是什么?

感谢。

2 个答案:

答案 0 :(得分:1)

如果不重新编写供应商源代码,您可以查看After middleware,然后在它返回之前捕获它。这不是最优雅的解决方案,但它可能就足够了。

对不起,这不是一个完整的解决方案,我没有足够的意见来发表评论。

答案 1 :(得分:1)

我花了一整晚的时间在Laravel 6中弄清楚自己如何做。

  1. 我创建了一个名为AccessLogMiddleware的中间件
<?php

namespace App\Http\Middleware;

use App\AccessLog;
use App\User;
use Carbon\Carbon;
use Closure;
use Illuminate\Support\Facades\Hash;


class AccessLogMiddleware
{
    public function handle($request, Closure $next)
    {
        if ($request->route()->getName() === 'passport.token'){ //this the route name of the API endpoint to get the token
            $accessLog = new AccessLog([
                'username' => $request->username,
                'ip_address' => $request->getClientIp(),
                'login_time' => Carbon::now(),
            ]);

            $user = User::query()->where([
                'username' => $request->username,
            ])->first();

            if ($user) {
                $accessLog->is_valid_username = 1;
                if (Hash::check($request->password, $user->password)){
                    $accessLog->is_valid_password = 1;
                }
            };

            $accessLog->save();
        }
        return $next($request);
    }
}
  1. 将其注册到Http\Kernel
protected $routeMiddleware = [
     'access_log' => \App\Http\Middleware\AccessLogMiddleware::class,
     ....
]
  1. 将中间件应用于Passport::routes(),在我的情况下,它位于AuthServiceProvider中:
Passport::routes(null, ['middleware' => 'access_log']);

您都准备好了!