温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

使用Laravel怎么自动生成验证

发布时间:2021-06-08 15:59:10 来源:亿速云 阅读:189 作者:Leah 栏目:开发技术

使用Laravel怎么自动生成验证?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

路由

路由文件中会新加入以下内容:

Auth::routes(); Route::get('/home','HomeController@index')->name('home');

首先先是Auth::route();,这句代码等于以下全部设置(文件位置是\Illuminate\Routing\Router.php):

/**   * Register the typical authentication routes for an application.   *   * @return void   */  public function auth()  {   // Authentication Routes...   $this->get('login', 'Auth\LoginController@showLoginForm')->name('login');   $this->post('login', 'Auth\LoginController@login');   $this->post('logout', 'Auth\LoginController@logout')->name('logout');   // Registration Routes...   $this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');   $this->post('register', 'Auth\RegisterController@register');   // Password Reset Routes...   $this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');   $this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');   $this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');   $this->post('password/reset', 'Auth\ResetPasswordController@reset');  }

这一部分先讲注册,首先,可以看到登录(login)的路由指向的是Auth\LoginController@showLoginForm,这个控制器是app\Http\Auth\LoginController.php,这里贴一下他的代码:

class LoginController extends Controller {  /*  |--------------------------------------------------------------------------  | Login Controller  |--------------------------------------------------------------------------  |  | This controller handles authenticating users for the application and  | redirecting them to your home screen. The controller uses a trait  | to conveniently provide its functionality to your applications.  |  */  use AuthenticatesUsers;  /**   * Where to redirect users after login.   *   * @var string   */  protected $redirectTo = '/home';  /**   * Create a new controller instance.   *   * @return void   */  public function __construct()  {   $this->middleware('guest')->except('logout');  } }

而其中并没有设置showLoginForm方法,该方法被保存在trait AuthenticatesUsers中,该方法的代码如下:

public function showLoginForm()  {   return view('auth.login');  }

就是返回一个视图,下面我们来看该视图:

<form class="form-horizontal" method="POST" action="{{ route('login') }}"> </form>

而其中最重要的就是看这个表单被提交到了哪里,结合上面的路由表,可以看到是

public function login(Request $request)  {   $this->validateLogin($request);   /**   *   protected function validateLogin(Request $request)  {   $this->validate($request, [    $this->username() => 'required|string',    'password' => 'required|string',   ]);  }   其中 $this->username() 就是 return 'email';   **/   // 限制请求次数,防止暴力破解的   if ($this->hasTooManyLoginAttempts($request)) {    $this->fireLockoutEvent($request);    return $this->sendLockoutResponse($request);   }   /**   // 关于 attempt 的介绍可以看我上一篇博客   protected function attemptLogin(Request $request)  {   return $this->guard()->attempt(    $this->credentials($request), $request->has('remember')   );  }  **/   // 如果验证通过的话   if ($this->attemptLogin($request)) {    return $this->sendLoginResponse($request);   }   // 否则的话增加验证的统计次数   $this->incrementLoginAttempts($request);   // 返回错误信息   return $this->sendFailedLoginResponse($request);  }

可以看到验证的重点还是Auth::attempt()函数,而且默认是使用email进行验证。

退出操作的代码如下:

public function logout(Request $request)  {   $this->guard()->logout();   $request->session()->invalidate();   return redirect('/');  }

$this->guard()的代码如下:

protected function guard()  {   return Auth::guard();  }

logout的具体的执行代码如下,别问我怎么找到的,PHPStorm的全项目文本搜索不解释:\Illuminate\Auth\SessionGuard.php:

public function logout()  {   $user = $this->user();   $this->clearUserDataFromStorage();   if (! is_null($this->user)) {    $this->cycleRememberToken($user);   }   if (isset($this->events)) {    $this->events->dispatch(new Events\Logout($user));   }   // Once we have fired the logout event we will clear the users out of memory   // so they are no longer available as the user is no longer considered as   // being signed into this application and should not be available here.   $this->user = null;   $this->loggedOut = true;  }

其中牵扯很多,那么我换种角度考虑,假设我们不考虑logout()的具体实现,而是思考如何制作自己的退出设置,那么该如何修改源码呢?好像直接修改成下面的形式就可以了:

public function logout(Request $request)  {   Auth::guard()->logout();   $request->session()->invalidate();   // 自定义重定向地址   return redirect('/');  }

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI