【问题标题】:How can you add back authentication to Laravel 5.1?如何将身份验证添加到 Laravel 5.1?
【发布时间】:2015-12-05 13:46:04
【问题描述】:

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

【问题讨论】:

    标签: authentication login laravel-5.1


    【解决方案1】:

    Laravel 已经有关于 building authentication into your Laravel 5.1 app 的文档。不过,我会更详细地介绍一下...

    安装 Laravel

    首先,确保您全新安装了 Laravel。这是我在Installing Laravel 5.1 on OSX with MAMP 上的教程。

    添加 Twitter 引导

    downloading bootstrap之后添加bootstrap.css文件到public/css目录下。 (您可能需要创建 css 目录。

    还将引导程序的 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');
    

    添加认证视图

    首先让我们创建一个刀片模板以用于我们所有的其他视图。我们可以通过创建一个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
    

    使用以下命令触发迁移:

    php artisan migrate
    

    由于我使用的是 MAMP,因此在尝试迁移时出现此错误。

    [PDOException]                                    
    

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

    解决方案是add the unix_socket key with a value of the path that the mysql.sock resides in MAMP

    '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',
        ],
    

    设置 SMTP 服务器

    Laravel 5.1 默认为 mailtrap.io。我第一次尝试这个,实际上很容易!第一步是setup mailtrap.io account

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

    MAIL_DRIVER=smtp
    MAIL_HOST=mailtrap.io
    MAIL_PORT=2525
    MAIL_USERNAME=xxxxxx
    MAIL_PASSWORD=xxxxxxx
    MAIL_ENCRYPTION=null
    

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

    'from' => ['address' => 'noreply@test.com', 'name' => 'test'],
    

    创建仪表板

    添加仪表板路线

    Route::get('dashboard', 'Dash\DashboardController@home');
    

    将仪表板控制器添加到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');
        }
    }
    

    注意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
    

    更新登录重定向:

    • 更新app/Http/Middleware/RedirectIfAuthenticated

    与:

    return redirect('/dashboard');
    

    添加到Auth/PasswordController.phpAuth/AuthController.php 文件。

    protected $redirectTo = '/dashboard';
    

    验证仪表板

    要将仪表板的访问权限限制为仅登录的用户,我们可以将以下内容添加到仪表板控制器

    public function __construct() 
    {
        $this->middleware('auth');
    }
    

    【讨论】:

      【解决方案2】:

      除了 Marty Thomas 指出的文档之外,您还可以尝试使用此 package 进行身份验证脚手架。

      【讨论】:

      • 是的。我也尝试了这个包。我只是一个控制狂,喜欢确切地知道发生了什么,并将控制器/视图都组织在同一个地方。但是这个包确实很好用。
      猜你喜欢
      • 2016-06-11
      • 1970-01-01
      • 2019-07-17
      • 1970-01-01
      • 2020-07-23
      • 2015-09-23
      • 2016-05-13
      • 1970-01-01
      • 2021-04-03
      相关资源
      最近更新 更多