如何在Laravel 5.1中添加身份验证?

Mar*_*mas 3 authentication login laravel-5.1

Laravel 5推出了一个很好的Auth脚手架,其中包括用于注册和验证用户的所有路由/控制器/视图.但我最近开始使用Laravel 5.1,并注意到身份验证不再内置.如何将其添加回去?

Mar*_*mas 7

Laravel已经有关于在Laravel 5.1应用程序中构建身份验证的文档.但是,我会更详细地介绍一下......

安装Laravel

首先,确保你有一个全新的Laravel安装.这是我在使用MAMP在OSX安装Laravel 5.1的教程.

添加Twitter Bootstrap

之后下载引导添加bootstrap.css文件到public/css目录中.(您可能必须创建css目录.

同时将bootstrap的fonts目录复制到应用程序的public目录中.

添加身份验证路由

将以下路由添加到该app/Http/routes.php文件.

// Authentication routes...
Route::get('auth/login', 'Auth\AuthController@getLogin');
Route::post('auth/login', 'Auth\AuthController@postLogin');
Route::get('auth/logout', 'Auth\AuthController@getLogout');

// Registration routes...
Route::get('auth/register', 'Auth\AuthController@getRegister');
Route::post('auth/register', 'Auth\AuthController@postRegister');

// Password reset link request routes...
Route::get('password/email', 'Auth\PasswordController@getEmail');
Route::post('password/email', 'Auth\PasswordController@postEmail');

// Password reset routes...
Route::get('password/reset/{token}', 'Auth\PasswordController@getReset');
Route::post('password/reset', 'Auth\PasswordController@postReset');
Run Code Online (Sandbox Code Playgroud)

添加认证视图

首先,让我们创建一个刀片模板,用于我们所有其他视图.我们可以通过创建resources/views/auth/app.blade.php文件来做到这一点.并复制/粘贴此处显示的代码:https://github.com/laravel/laravel/blob/5.0/resources/views/app.blade.php

创建一个新resources/views/auth目录.在该目录中,创建以下文件.

对于"忘记密码"电子邮件,请创建一个resources/views/emails目录,并将以下文件放入其中.

创建数据库和表

为了使我们能够实际注册新用户和登录,我们必须创建适当的数据库表.幸运的是,这已经可以通过迁移获得.

首先,创建一个新的数据库表,并在.env 文件中定义它的连接.

DB_HOST=localhost
DB_DATABASE=name
DB_USERNAME=root
DB_PASSWORD=xxxxxxx
Run Code Online (Sandbox Code Playgroud)

使用以下命令触发迁移:

php artisan migrate
Run Code Online (Sandbox Code Playgroud)

由于我正在使用MAMP,因此在尝试迁移时出现此错误.

[PDOException]                                    
Run Code Online (Sandbox Code Playgroud)

SQLSTATE [HY000] [2002]没有这样的文件或目录

解决方案是使用mysql.sock驻留在MAMP中的路径值添加unix_socket密钥.

'mysql' => [
        'driver'    => 'mysql',
        'host'      => env('DB_HOST', 'localhost'),
        'database'  => env('DB_DATABASE', 'forge'),
        'username'  => env('DB_USERNAME', 'forge'),
        'password'  => env('DB_PASSWORD', ''),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
        'unix_socket'   => '/Applications/MAMP/tmp/mysql/mysql.sock',
    ],
Run Code Online (Sandbox Code Playgroud)

设置SMTP服务器

Laravel 5.1默认使用mailtrap.io.我第一次试一试,实际上很容易!第一步是设置mailtrap.io帐户.

使用SMTP设置更新.env文件(注册后提供)

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=xxxxxx
MAIL_PASSWORD=xxxxxxx
MAIL_ENCRYPTION=null
Run Code Online (Sandbox Code Playgroud)

config/mail.php文件中的地址更新.

'from' => ['address' => 'noreply@test.com', 'name' => 'test'],
Run Code Online (Sandbox Code Playgroud)

创建仪表板

添加仪表板路由

Route::get('dashboard', 'Dash\DashboardController@home');
Run Code Online (Sandbox Code Playgroud)

添加仪表板控制器 app/Http/Controllers/Dash/DashboardController.php

 <?php

namespace App\Http\Dash\Controllers;

use Illuminate\Http\Request;
    use App\Http\Controllers\Controller;

class DashboardController extends Controller
{
    public function home(Request $request)
    {
        return view('dashboard/home');
    }
}
Run Code Online (Sandbox Code Playgroud)

注意使用use App\Http\Controllers\Controller;.这很重要,因为我们的仪表板使用了不同的命名空间.

观点resources/views/dashboard/home.blade.php:

   @extends('app')

@section('content')
<div class="container">
    <div class="row">
        <div class="col-md-10 col-md-offset-1">
            <div class="panel panel-default">
                <div class="panel-heading">Dashboard</div>

                <div class="panel-body">
                    You are logged in!
                </div>
            </div>
        </div>
    </div>
</div>
@endsection
Run Code Online (Sandbox Code Playgroud)

更新登录重定向:

  • 更新 app/Http/Middleware/RedirectIfAuthenticated

有:

return redirect('/dashboard');
Run Code Online (Sandbox Code Playgroud)

加入Auth/PasswordController.phpAuth/AuthController.php文件.

protected $redirectTo = '/dashboard';
Run Code Online (Sandbox Code Playgroud)

验证仪表板

要将仪表板的访问权限仅限于那些已登录的仪表板,我们可以将以下内容添加到仪表板控制器中

public function __construct() 
{
    $this->middleware('auth');
}
Run Code Online (Sandbox Code Playgroud)