Laravel 5.5 内置的Auth模块实现注册与登录

发布时间:2018-03-13 编辑:小张个人博客 查看次数:10402

用户认证脚手架

Laravel 自带了用户认证功能,我们将利用此功能来快速构建我们的用户中心。

首先执行认证脚手架命令,生成代码:

php artisan make:auth


命令 make:auth 会询问我们是否要覆盖 app.blade.php,因为我们在前面章节中已经自定义了『主要布局文件』—— app.blade.php,所以此处输入 no,如下:

Laravel 自带了用户认证脚手架

打开 routes/web.php 查看修改了哪些内容:

<?php

Route::get('/', '[email protected]')->name('root');

//Auth::routes();
//Route::get('/home', '[email protected]')->name('home');

此处是 Laravel 的用户认证路由,以下等同于:Auth::routes();
// Authentication Routes...
Route::get('login', 'Auth\[email protected]')->name('login');
Route::post('login', 'Auth\[email protected]');
Route::post('logout', 'Auth\[email protected]')->name('logout');

// Registration Routes...
Route::get('register', 'Auth\[email protected]')->name('register');
Route::post('register', 'Auth\[email protected]');

// Password Reset Routes...
Route::get('password/reset', 'Auth\[email protected]')->name('password.request');
Route::post('password/email', 'Auth\[email protected]')->name('password.email');
Route::get('password/reset/{token}', 'Auth\[email protected]')->name('password.reset');
Route::post('password/reset', 'Auth\[email protected]');

为了更加直观,我们将在 web.php 中使用以上替换 Auth::routes();

我们已经有自己的主页了,不需要再次设置主页,直接删除即可。

Route::get('/home', '[email protected]')->name('home');

因为无需使用 make:auth 生成的主页,请运行以下命令删除无用文件:

  rm app/Http/Controllers/HomeController.php
  rm resources/views/home.blade.php

在浏览器导航栏里输入 http://bbs.test/login ,会访问登录页面,看看效果

Laravel 5.5 内置的Auth模块实现注册与登录

顶部导航之前用的是两个假链接,现在我们已经有业务逻辑,接下来将链接套进去,并加上登录后的效果:_header.blade.php

<!-- Right Side Of Navbar -->
<ul class="nav navbar-nav navbar-right">
<!-- Authentication Links -->
@guest
<li><a href="{{ route('login') }}">登录</a></li>
<li><a href="{{ route('register') }}">注册</a></li>
@else
    <li class="dropdown">
	<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
	    <span class="user-avatar pull-left" style="margin-right:8px; margin-top:-5px;">
		<img src="https://lccdn.phphub.org/uploads/avatars/22397_1519205627.jpg?imageView2/1/w/100/h/100" class="img-responsive img-circle" width="30px" height="30px">
	    </span>
	    {{ Auth::user()->name }} <span class="caret"></span>
	</a>

	<ul class="dropdown-menu" role="menu">
	    <li>
		<a href="{{ route('logout') }}"
		   onclick="event.preventDefault();
			     document.getElementById('logout-form').submit();">
		    退出登录
		</a>

		<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
		    {{ csrf_field() }}
		</form>
	    </li>
	</ul>
    </li>
    @endguest
</ul>

重点看 Bladeguest 条件语句:

@guest
    <li><a href="{{ route('login') }}">登录</a></li>
    <li><a href="{{ route('register') }}">注册</a></li>
@else
    .
    .
    .
@endguest

如果是未登录用户的话,就显示注册和登录按钮,如果是已登录用户的话,即显示用户菜单。

当用户点击『退出登录』按钮时,触发 JS 提交『退出登录表单』—— logout-form 。注意提交 POST 类型表单时需要一并提交 CSRF 令牌。

  <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
      {{ csrf_field() }}
 </form>

接下来我们开始执行数据迁移来创建数据库表结构。

php artisan migrate

laravel 数据迁移

数据库表结构已经创建成功,进入浏览器,刷新错误页面以此来重新提交我们的表单

报 404 错误

显示 404 页面未找到,我们能看到地址栏链接为 http://bbs.test/home ,因我们自定义了主页,make:auth 生成的 home 主页文件已经被我们删除,而默认的业务逻辑是在注册成功后,直接跳转到 home 主页,接下来我们需要修改这些逻辑。请将下图用红框标示的几个文件里的 '/home' 字串修改为 /, 请勿使用全局替换。

Laravel 登录跳转

测试登录功能

重新打开首页 http://bbs.test/ ,点击右上角的下拉菜单中的『退出登录』按钮:

Laravel 用户认证

走到这一步基本上 Laravel 5.5 注册与登录就完成了!



出处:小张个人博客

网址:http://blog.023xs.cn/

您的支持是对博主最大的鼓励,感谢您的认真阅读。欢迎转载,但请保留该声明。

顶部

Copyright © 小张个人博客 All Rights Reserved 渝ICP备15006773号-1

联系方式:[email protected] | 本站文章仅供学习和参考

渝公网安备 50024102500267号