4

官方文档:Laravel 5.2文档服务——用户认证

如果你看官方文档不太懂,那么请看下文操作。

说明

框架版本:laravel 5.2

laravel 5.2内置了auth用户认证服务,所以做网站时用户认证似乎变得简单了很多,再加上框架的中间件机制,实现路由保护功能也更加方便快捷了。

laravel 框架源自外国人开发,许多思想和我们的不太一样,刚开始看的时候我还是一头雾水,可能接触少的缘故;后来看了部分源码才知道具体的过程,所以这里写篇教程帮助入门需要的朋友。

初始化Auth

laravel 5.2内置了auth用户认证服务,laravel有专门的命令来快速创建auth用户认证的一些东西,比如路由注册,默认视图等。

初始化(请开启cmd命令行,cd到laravel框架目录)

php artisan make:auth

这个命令执行了的操作:

clipboard.png

生成了注册、登录、重置密码、主页等视图,请在 resources/views 文件夹中查看;
创建了HemoController.php文件,在 app/Http/Controllers 文件夹查看;
还有就是更新了路由,其实就是注册了路由 app/Http/routes.php,打开文件你会看到增加了两行代码:

clipboard.png

Route::auth(); 这一句是注册相关的路由,具体的源码可以看 vendor/laravel/framework/srcIlluminate/Routing/Router.php 中的 auth方法

clipboard.png

Route::get('/home', 'HomeController@index');这句注册个home路由,指向Home控制器index方法,这是需要登陆的用户才能访问的路由,是因为Home控制器加了个中间件 auth

clipboard.png

以上是 php artisan make:auth命令的详细说明,接下来是数据库创建。

创建数据库

如果你是通过composer安装工具安装的laravel框架,默认会在 database/migrations目录中存在两个文件
clipboard.png
保持默认就好,不用修改。

如果不存在这样的文件,可以通过
php artisan make:migration create_users_table
php artisan make:migration create_password_table生成,

然后编辑文件

//create_users_table.php
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }
    public function down()
    {
        Schema::drop('users');
    }
}
//create_password_table.php
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreatePasswordResetsTable extends Migration
{
    public function up()
    {
        Schema::create('password_resets', function (Blueprint $table) {
            $table->string('email')->index();
            $table->string('token')->index();
            $table->timestamp('created_at');
        });
    }
    public function down()
    {
        Schema::drop('password_resets');
    }
}

到这里请开启数据库,并在.env文件配置好数据库连接,创建相关数据;;然后执行命令创建表

php artisan migrate

命令会创建三个表

clipboard.png

到这里工作基本完毕,接下来看看登录注册效果。

测试

cd到项目目录,执行 php -S localhost:3000 -t public ,如果没有错误,就可以在浏览器输入:localhost:3000看效果了。

clipboard.png
如果你发现开启一致在转圈圈,那是因为模板里引用了cdn的boostrap文件,把它改成为本地的就快了。

clipboard.png

点击注册

clipboard.png

登录

clipboard.png

重置密码,如果需要重置密码,可以在浏览器地址栏输入 localhost:3000/password/reset

clipboard.png

填写需要重置密码,点击发送重置密码链接到邮箱,这里的邮箱是你注册时的邮箱,点击后会在邮箱里收到信息

clipboard.png

打开链接就可以重置密码了。

注:这里发送邮件需要在config/email.php中或者.env文件配置邮箱服务,具体的可以看官方文档Laravel 5.2 服务——邮件

认证相关方法

可能在流程中会用到一些查看验证信息,所以一些必备的方法获取认证信息是必要的。

一些与认证有关的方法

    Auth::guard('admin')    //指定看守 返回Auth对象
    Auth::user();            //获取通过验证的用户 Auth::user()->name
    Auth::check();            //检查是否验证
    Auth::viaRemember();    //判断用户是否使用“记住我”cookie进行认证
    Auth::login($user);        //将一个已存在的用户实例登录到应用中,传入实例必须是Illuminate\Contracts\Auth\Authenticatable 契约的实现
    Auth::loginUsingId($userid);//通过用户ID登录到应用
    Auth::once($credentials);//只在单个请求中将用户登录到应用,而不存储任何 Session 和 Cookie
    Auth::attempt($credentials);//登录用户 ,$credentials是['email' => $email, 'password' => $password],这个方法会和数据库对比
    Auth::onceBasic();
    Auth::provider();
    Auth::logout();            //注销验证用户
    Auth::extend();            //自定义看守
    Auth::provider();        //自定义用户提供者

提出问题

  • 如果实现前后台用户验证?
  • 如果laravel自带的用户表结构不符合我的项目需求怎么办?

对于以上似乎网上已经有答案,但我还是发现了些问题,比如 laravel auth的源码大部分已经写死是通过 email,password字段来验证的了;如何得到解答我还在测试中,如果测试完成我会另开文档编写auth源码解读相关教程。如果你已经有了解决办法,希望在评论告知下,谢谢。


mengdu
2.2k 声望57 粉丝

Front End & Back End(Node.js) Developer