我们有一个通过 Ang 1.6.5 前端使用 Laravel REST API 后端的网络应用程序。
我希望记录 3 种不同的身份验证请求结果: 1. 成功的身份验证。2. 有效的用户帐号,无效的密码。3. 无效的用户帐户。
我似乎无法弄清楚如何连接到 Passport 的身份验证过程。
我尝试使用一些自定义中间件,也是自定义提供程序。两者都不起作用,尽管它可能是实施。
这里的正确方法是什么?
谢谢。
我们有一个通过 Ang 1.6.5 前端使用 Laravel REST API 后端的网络应用程序。
我希望记录 3 种不同的身份验证请求结果: 1. 成功的身份验证。2. 有效的用户帐号,无效的密码。3. 无效的用户帐户。
我似乎无法弄清楚如何连接到 Passport 的身份验证过程。
我尝试使用一些自定义中间件,也是自定义提供程序。两者都不起作用,尽管它可能是实施。
这里的正确方法是什么?
谢谢。
我花了一个晚上在 Laravel 6 中自己研究如何做到这一点。
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);
}
}
Http\Kernel
protected $routeMiddleware = [
'access_log' => \App\Http\Middleware\AccessLogMiddleware::class,
....
]
Passport::routes()
,在我的情况下,它位于AuthServiceProvider
:Passport::routes(null, ['middleware' => 'access_log']);
你都准备好了!
无需重写供应商源代码,您可以查看 After 中间件,然后在它返回之前捕获它。这不是最优雅的解决方案,但它可能就足够了。
抱歉,这不是一个完整的解决方案,我没有足够的积分来发表评论。