Laravel 5.3 Ajax登录自定义凭据

时间:2016-11-17 02:09:55

标签: laravel authentication laravel-5.3

我可以通过Laravel 5.3中的Ajax登录

通过使用适当的参数向登录路线发出请求后,可以轻松完成此操作。

但是,对于我的应用程序,我正在为用户设计两种方式 - 通过Laravel已经支持的传统电子邮件/密码组合,通过将被分发的访问代码,并允许所述代码的拥有者在没有电子邮件/密码组合的情况下登录。没有"注册"在我的应用程序中,只有不同级别的身份验证。

无论如何,在/vendor/laravel/framework/src/Illuminate/Foundation/Auth我正在编辑AuthenticatesUsers.php,并了解此功能专门处理登录尝试:

protected function attemptLogin(Request $request)
    {
        return $this->guard()->attempt(
            $this->credentials($request), $request->has('remember')
        );
    }

我的问题是,如何根据请求的内容更改attempt()的成功?

换句话说,如果有人发送了ajax访问代码,则不应该针对电子邮件/密码组合进行测试,因为它显然会失败。同样,如果他们发送带有电子邮件/密码参数的ajax,则不应对可用访问代码列表进行测试。

我是否在正确的轨道上?我可以在Laravel中根据请求参数制作Auth::attempt()条件吗?

1 个答案:

答案 0 :(得分:0)

我不建议编辑框架文件。 在将其发送到控制器之前,您应该编写一个中间件来处理用户请求的身份验证类型的标识。在您的中间件中,

public function handle($request, Closure $next)
{
    // check if the request has access_code
    $request->attributes->add(['using_access_code' => $request->has('access_code')]);
    return $next($request);
}

在您的控制器中,您可以检查我们新添加的此请求参数的正面测试(您当然可以直接在控制器内部执行此操作,但我个人喜欢使用中间件来处理此问题,因为您可能希望添加更多功能)

在您的控制器中,如果using_access_code为false,请继续attempt()登录,否则,使用access_code检索用户,并使用Auth::login($user)手动验证用户。如果您不清楚,请告诉我。