我可以通过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()
条件吗?
答案 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)
手动验证用户。如果您不清楚,请告诉我。