Laravel5.5 怎么重写 auth 环节中 Illuminate\Foundation\Auth\RegistersUsers 的 register 方法?
场景#
在做一个注册页面,使用了 laravel5.5 自带的 auth 功能,但验证用到了 geetest 的拖动验证,不是数字验证。这个需要二次验证,并且直接用到 form 表单提交。在 register 的时候,不能直接使用 Illuminate\Foundation\Auth\RegistersUsers
的 register
方法,需要对其进行重写。在 controller 中进行重写。其实,这个不是调用父类的方法。
需要使用到的几个类#
App\Http\Controllers\Auth\RegisterController
form 表单提交经过路由,就直接调用这里的register
方法,可是这里没有 register 方法。Illuminate\Foundation\Auth\RegistersUsers
上边说了,controller 中没有 register 方法,其实,register 方法,就在这个类中。
再看 register 方法。Illuminate\Foundation\Auth\RegistersUsers
public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
$this->guard()->login($user);
return $this->registered($request, $user)
?: redirect($this->redirectPath());
}
第一步,就是进行验证。但是我所需要的场景中的验证,这里满足不了。所以在 RegisterController 中重写了 register 方法。先进行验证,然后想再调用这里的 register 方法。这里,GeetestLib 是我自己封装的一个服务,使用的 geetest 的 api。我 php 不好(从 as3 转过来的),这里不懂怎么调用,有会的朋友,请指教一下。或是有其他好的思路。谢谢。
我的代码#
App\Http\Controllers\Auth\RegisterController
public function register(Request $request, GeetestLib $geetestLib)
{
$this->__validGeetestData($request->all(), '请先完成验证!');
$geetest_challenge = $request->input('geetest_challenge');
$geetest_validate = $request->input('geetest_validate');
$geetest_seccode = $request->input('geetest_seccode');
// 二次验证
$gtserver = Session::get('gtserver');
if($gtserver == 1)
{
$data = array(
"user_id" => 'xishui',
"client_type" => "web",
"ip_address" => $request->getClientIp()
);
$result = $geetestLib->success_validate($geetest_challenge, $geetest_validate,
$geetest_seccode,$data);
if($result == FALSE)
$this->__validGeetestData(array(), '二次验证不通过!');
}
else
{
$result = $geetestLib->fail_validate($geetest_challenge, $geetest_validate,
$geetest_seccode);
if($result == FALSE)
$this->__validGeetestData(array(), '宕机,二次验证不通过!');
}
//$registerUsers->register($request);
}
private function __validGeetestData($data, $message)
{
return Validator::make($data, [
'geetest_validate' => 'required',
], [
'geetest_validate.required' => $message,
])->validate();
}
(
推荐文章: