Laravel 5.2 使用自定义路由进行身份验证
Laravel 5.2 authentication with custom routes
我正在使用 Laravel 5.2
从事网络项目
我的用例很简单:
在呈现任何页面之前,请验证用户是否已通过身份验证。如果没有,请提供带有自定义身份验证的登录表单(不是 Eloquent 的默认内容)
读完这个场景后,我有:
// routes.php
Route::get('/', 'HomeController@index');
然后如果我想保护我所有的页面,我需要在控制器的构造函数中使用中间件 auth。如果我想在提供任何页面之前请求登录用户,我所有的控制器都应该遵循相同的模式。
// app/Http/Controllers/HomeController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
class HomeController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function index()
{
return view('home');
}
}
到目前为止,还不错。如果我在“/”访问我的应用程序,我将被重定向到 /login 页面。
我创建了登录页面:
// views/auth/login.blade.php
@extends('layouts.app')
@section('content')
<form class="form-signin" method="post" action="{{ url ('/login') }}">
{!! csrf_field() !!}
<h2 class="form-signin-heading">Please sign in</h2>
<label for="inputUsername" class="sr-only">Username</label>
<input type="text" id="inputUsername" class="form-control" placeholder="Username" name="username" required autofocus>
<label for="inputPassword" class="sr-only">Password</label>
<input type="password" id="inputPassword" class="form-control" placeholder="Password" name="password" required>
<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
</form>
@endsection
请注意重定向到 /login 的表单的操作。
然后我通过提供以下新路线更新 routes.php:
// Authentication Routes...
Route::get('login', 'Auth\AuthController@showLoginForm');
Route::post('login', 'Auth\AuthController@login');
Route::get('logout', 'Auth\AuthController@logout');
Route::get('/', 'HomeController@index');
通过这些新路由,我正在捕获 login/logout 场景并分配 AuthController 的方法来处理它们。
在已经实现的AuthController上,我想我需要定义这些方法。
我无法使其正常工作,或者我以错误的方式执行此自定义身份验证。
我有:
// app/Http/Auth/AuthController.php
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
class AuthController extends Controller
{
use AuthenticatesAndRegistersUsers, ThrottlesLogins;
protected $redirectTo = '/';
public function __construct()
{
$this->middleware($this->guestMiddleware(), ['except' => 'logout']);
}
// ... lot of default stuff ..
protected function login($data)
{
//
// do custom login authentication with $data
// ie: validate thru a web service or something
//
return redirect()->intended('/');
}
}
关于如何实施这个有什么建议吗?
将您的登录功能更改为
protected function login(Request $data)
{
//
// do custom login authentication with $data
// ie: validate thru a web service or something
//
return redirect()->intended('/');
}
这会覆盖 Illuminate\Foundation\Auth\AuthenticatesUsers
中最初由 Laravel Auth
使用的函数
感谢所有回答此问题的人。我结束了自定义集成,其中用户在 Eloquent 的用户模型和我的外部服务上重复。
不幸的是,缺少关于 Laravel 5.2 和自定义身份验证方法的文档,这使得它成为一个补丁解决方案,直到出现更稳定的东西。
谢谢,编码愉快!
我正在使用 Laravel 5.2
从事网络项目我的用例很简单: 在呈现任何页面之前,请验证用户是否已通过身份验证。如果没有,请提供带有自定义身份验证的登录表单(不是 Eloquent 的默认内容)
读完这个场景后,我有:
// routes.php
Route::get('/', 'HomeController@index');
然后如果我想保护我所有的页面,我需要在控制器的构造函数中使用中间件 auth。如果我想在提供任何页面之前请求登录用户,我所有的控制器都应该遵循相同的模式。
// app/Http/Controllers/HomeController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
class HomeController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function index()
{
return view('home');
}
}
到目前为止,还不错。如果我在“/”访问我的应用程序,我将被重定向到 /login 页面。
我创建了登录页面:
// views/auth/login.blade.php
@extends('layouts.app')
@section('content')
<form class="form-signin" method="post" action="{{ url ('/login') }}">
{!! csrf_field() !!}
<h2 class="form-signin-heading">Please sign in</h2>
<label for="inputUsername" class="sr-only">Username</label>
<input type="text" id="inputUsername" class="form-control" placeholder="Username" name="username" required autofocus>
<label for="inputPassword" class="sr-only">Password</label>
<input type="password" id="inputPassword" class="form-control" placeholder="Password" name="password" required>
<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
</form>
@endsection
请注意重定向到 /login 的表单的操作。 然后我通过提供以下新路线更新 routes.php:
// Authentication Routes...
Route::get('login', 'Auth\AuthController@showLoginForm');
Route::post('login', 'Auth\AuthController@login');
Route::get('logout', 'Auth\AuthController@logout');
Route::get('/', 'HomeController@index');
通过这些新路由,我正在捕获 login/logout 场景并分配 AuthController 的方法来处理它们。
在已经实现的AuthController上,我想我需要定义这些方法。
我无法使其正常工作,或者我以错误的方式执行此自定义身份验证。
我有:
// app/Http/Auth/AuthController.php
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
class AuthController extends Controller
{
use AuthenticatesAndRegistersUsers, ThrottlesLogins;
protected $redirectTo = '/';
public function __construct()
{
$this->middleware($this->guestMiddleware(), ['except' => 'logout']);
}
// ... lot of default stuff ..
protected function login($data)
{
//
// do custom login authentication with $data
// ie: validate thru a web service or something
//
return redirect()->intended('/');
}
}
关于如何实施这个有什么建议吗?
将您的登录功能更改为
protected function login(Request $data)
{
//
// do custom login authentication with $data
// ie: validate thru a web service or something
//
return redirect()->intended('/');
}
这会覆盖 Illuminate\Foundation\Auth\AuthenticatesUsers
中最初由 Laravel Auth
感谢所有回答此问题的人。我结束了自定义集成,其中用户在 Eloquent 的用户模型和我的外部服务上重复。
不幸的是,缺少关于 Laravel 5.2 和自定义身份验证方法的文档,这使得它成为一个补丁解决方案,直到出现更稳定的东西。
谢谢,编码愉快!