【发布时间】:2015-12-05 13:46:04
【问题描述】:
Laravel 5 推出了一个不错的 Auth 脚手架,其中包括用于注册和验证用户的所有路由/控制器/视图。但是我最近开始使用 Laravel 5.1,并注意到不再内置身份验证。如何将其添加回来?
【问题讨论】:
标签: authentication login laravel-5.1
Laravel 5 推出了一个不错的 Auth 脚手架,其中包括用于注册和验证用户的所有路由/控制器/视图。但是我最近开始使用 Laravel 5.1,并注意到不再内置身份验证。如何将其添加回来?
【问题讨论】:
标签: authentication login laravel-5.1
Laravel 已经有关于 building authentication into your Laravel 5.1 app 的文档。不过,我会更详细地介绍一下...
首先,确保您全新安装了 Laravel。这是我在Installing Laravel 5.1 on OSX with MAMP 上的教程。
在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',
],
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.php 和Auth/AuthController.php 文件。
protected $redirectTo = '/dashboard';
要将仪表板的访问权限限制为仅登录的用户,我们可以将以下内容添加到仪表板控制器
public function __construct()
{
$this->middleware('auth');
}
【讨论】:
除了 Marty Thomas 指出的文档之外,您还可以尝试使用此 package 进行身份验证脚手架。
【讨论】: