我创建了一个新的Laravel 5.2安装。我运行以下命令来安装默认的Laravel身份验证;
php artisan make:auth
注册表格有效,但登录只是在没有登录的情况下重定向到主页。当我输入错误的凭证时,显示没有错误。
这是我的路线档案:
Route::get('/', 'BaseController@index');
Route::get('/tutors', 'TutorsController@Index');
Route::get('/tutors/myrequest', 'TutorsController@RequestTutor');
Route::get('/tutors/{id}', 'TutorsController@show')->where(['id' => '[0-9]+']);
Route::get('/tutors/{GUID}', 'TutorsController@TutorByGUID')->where(['id' => '[A-Za-z]+[0-9]+']);
/********************Authentication routes**********************************/
Route::group(['middleware' => ['web']], function () {
Route::auth();
});
这是来自AuthController
:
class AuthController extends Controller
{
use AuthenticatesAndRegistersUsers, ThrottlesLogins;
protected $redirectTo = '/';
public function __construct()
{
$this->middleware($this->guestMiddleware(), ['except' => 'logout']);
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'firstname' => 'required|max:255',
'lastname' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|confirmed|min:6',
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return User
*/
protected function create(array $data)
{
return User::create([
'firstname' => $data['firstname'],
'lastname' => $data['lastname'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
}
}
这是包含home方法的BaseController
;
<?php namespace App\Http\Controllers;
use App\Services\InterfaceService;
use App\Repositories\TutorRepository;
use App\Http\Requests;
use Illuminate\Http\Request;
class BaseController extends Controller {
protected $TutorRepository;
protected $InterfaceService;
public function __construct(InterfaceService $InterfaceService, TutorRepository $TutorRepository)
{
//$this->middleware('guest');
$this->InterfaceService = $InterfaceService;
$this->TutorRepository = $TutorRepository;
}
public function index()
{
$tutors = $this->TutorRepository->all();
$page_info = \Config::get('constants.App.Pages.home');
$this->InterfaceService->SetPageInfo($page_info);
return view('home', ['TopTutors'=>$tutors]);
}
} ?>
这是登录视图中的代码。
<form role="form" method="POST" action="{{ url('/login') }}" id="login_form">
{!! csrf_field() !!}
<div class="mj_login_form">
<div class="form-group">
<input type="text" placeholder="Email" id="email" name="email" class="form-control" value="{{ old('email') }}">
@if ($errors->has('email'))
<span class="help-block"><strong>{{ $errors->first('email') }}</strong></span>
@endif
</div>
<div class="form-group">
<input type="password" placeholder="Your Password" id="password" class="form-control" name="password">
@if ($errors->has('password'))
<span class="help-block"><strong>{{ $errors->first('password') }}</strong></span>
@endif
</div>
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12 mj_toppadder20">
<div class="form-group pull-left">
<div class="mj_checkbox">
<input type="checkbox" value="1" id="check2" name="remember">
<label for="check2"></label>
</div>
<span> remember me</span>
</div>
</div>
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12 mj_toppadder20">
<div class="form-group pull-right">
<span><a href="{{ url('/password/reset') }}">forget password ?</a></span>
</div>
</div>
</div>
</div>
<div class="mj_pricing_footer">
<a href="#" onclick="$('#login_form').submit()">login Now</a>
</div>
</form>
答案 0 :(得分:1)
这是因为您的'/'
路由不在web
中间件组下,并且您没有将auth
中间件用于要进行身份验证的路由
这意味着当访问该路由时,会话不可用,并且auth
中间件不会触发,因此身份验证不起作用。
尝试在web
中间件组下放置要使用会话的所有路由,并且对于要使用auth
中间件进行身份验证的路由:
Route::group( ['middleware' => ['web'] ], function () {
/* these routes use 'auth' middleware, so only an authenticated user will access*/
Route::group( ['middleware' => 'auth' ], function () {
Route::get('/', 'BaseController@index');
});
Route::auth();
});
关于Laravel版本的说明:
请注意,如果您使用Laravel版本&gt; = 5.2.27
,默认情况下会在web
中定义的每条路线上使用中间件routes.php
,如您所见app/Providers/RouteServiceProvider.php
:
protected function mapWebRoutes(Router $router)
{
$router->group([
'namespace' => $this->namespace, 'middleware' => 'web'
], function ($router) {
require app_path('Http/routes.php');
});
}
在这种情况下,您可以删除使用web
中间件组的语句,但是您只需要使用auth
中间件来验证路由