Php Laravel登录时不断出现未经验证的异常错误
所以我一直在为另一种叫做超级用户的用户开发一个新的登录控制器。我一直在做控制器和所有附加的文件都是基于我在网站上找到的这个项目 所以我创建了控制器,添加和修改了所有必要的文件,没有问题,甚至从技术上来说,我使用的是新的防护。但随后出现了一个问题。就在我测试登录时,无论我尝试了多少次,它总是将我重定向回登录页面(在本例中,它也是子页面的索引) 奇怪的是,A)Laravel没有向我抛出任何错误,B)当我通过忘记密码控制器重置密码时,它会登录(我认为这是因为它的功能使它在重置密码后自动登录) 在过去的几天里,我一直在疯狂地寻找答案,但找不到任何与我的问题非常相似的答案。我怀疑这与我在LoginController中修改异常处理程序或登录函数的方式有关,因为注销函数工作时没有任何问题。它还执行密码重置,没有任何问题,这意味着我为用户创建的防护配置正确 我还知道它是从正确的数据库读取的,因为一旦密码重置,它就可以使用超级用户的凭据登录 希望有人能帮助我,以下是超级用户登录控制器的代码:Php Laravel登录时不断出现未经验证的异常错误,php,laravel,laravel-5,Php,Laravel,Laravel 5,所以我一直在为另一种叫做超级用户的用户开发一个新的登录控制器。我一直在做控制器和所有附加的文件都是基于我在网站上找到的这个项目 所以我创建了控制器,添加和修改了所有必要的文件,没有问题,甚至从技术上来说,我使用的是新的防护。但随后出现了一个问题。就在我测试登录时,无论我尝试了多少次,它总是将我重定向回登录页面(在本例中,它也是子页面的索引) 奇怪的是,A)Laravel没有向我抛出任何错误,B)当我通过忘记密码控制器重置密码时,它会登录(我认为这是因为它的功能使它在重置密码后自动登录) 在过去的
namespace App\Http\Controllers\Super\AuthSuper;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
class LoginController extends Controller
{
/**
* Where to redirect users after login.
*
* @var string
*/
//protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest:super')->except('logout');
}
public function showIndex(){
return view('caja.sucursal');
}
public function login(Request $request)
{
$this->validate($request, [
'email' => 'required|email',
'password' => 'required|min:6'
]);
$credential = [
'email' => $request->email,
'password' => $request->password
];
// Attempt to log the user in
if (guard()->attempt($credential)){
// If login succesful, then redirect to their intended location
return redirect()->intended(route('caja.home'));
}
// If Unsuccessful, then redirect back to the login with the form
data
return redirect()->back()->withInput($request->only('email', 'remember'));
}
public function logout(){
Auth::guard('super')->logout();
return redirect('/sucursal')->with('flash','Se ha cerrado la Sesión');;
}
public function guard()
{
return Auth::guard('super');
}
}
<form role="form" action="{{ route('caja.login')}}" method="POST">
{{ csrf_field() }}
<div class="form-group {{ $errors->has('rut') ? 'has-error':''}}">
<label class="sr-only" for="r-form-1-name">RUT</label>
<input type="text" name="rut" placeholder="Rut..." class="r-form-1-name form-control" id="r-form-1-name" value="{{ old('rut')}}">
{!! $errors->first('rut','<span class="help-block">:message</span>') !!}
</div>
<div class="form-group {{ $errors->has('password') ? 'has-error':''}}">
<label class="sr-only" for="r-form-1-email">CONTRASEÑA</label>
<input type="password" name="password" placeholder="Contraseña..." class="r-form-1-email form-control" id="r-form-1-email">
{!! $errors->first('password','<span class="help-block">:message</span>') !!}
</div>
<p class="terms">
* Olvidaste la Contraseña?
<!--<a href="#" class="launch-modal"
data-modal-id="modal-terms">Presiona aquí</a>-->
<a href="{{
route('caja.password.resetter') }}">Presiona aquí</a>
</p>
<center>
<a class="btn" href="
{{route('caja.home')}}">ENTRAR</a>
</center>
</form>
正如您所看到的,这里我将其分配为guard“super”,然后使用它来检查尝试登录的用户是否拥有它,如果他们拥有并且凭据正确,那么应该将其发送到主页
下面是auth.php文件中的一个片段,我在其中声明了guard“super”
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
'super' => [
'driver' => 'session',
'provider' => 'supers',
],
'api-super' => [
'driver' => 'token',
'provider' => 'supers',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'supers' => [
'driver' => 'eloquent',
'model' => App\Superuser::class,
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
],
'supers' => [
'provider' => 'supers',
'table' => 'password_resets',
'expire' => 60,
],
],
这里是修改后的重定向if authenticated函数,我在其中声明了“super”保护
public function handle($request, Closure $next, $guard = null)
{
switch ($guard){
case 'super':
if (Auth::guard($guard)->check()) {
return redirect()->route('caja.home');
}
break;
default:
if (Auth::guard($guard)->check()) {
return redirect()->route('home');
}
break;
}
return $next($request);
}
我认为这是整件事的罪魁祸首。Handler.php:
<?php
namespace App\Exceptions;
use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Request;
use Response;
use Illuminate\Auth\AuthenticationException;
class Handler extends ExceptionHandler
{
/**
* A list of the exception types that are not reported.
*
* @var array
*/
protected $dontReport = [
//
];
/**
* A list of the inputs that are never flashed for validation exceptions.
*
* @var array
*/
protected $dontFlash = [
'password',
'password_confirmation',
];
/**
* Report or log an exception.
*
* This is a great spot to send exceptions to Sentry, Bugsnag, etc.
*
* @param \Exception $exception
* @return void
*/
public function report(Exception $exception)
{
parent::report($exception);
}
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $exception
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $exception)
{
// if ($exception instanceof \Illuminate\Auth\AuthenticationException){
// return redirect('/')->with('flash','Por favor Inicia Sesión');
// }
return parent::render($request, $exception);
}
protected function unauthenticated($request, AuthenticationException $exception)
{
// return $request->expectsJson()
// ? response()->json(['message' => 'Unauthenticated.'], 401)
// : redirect()->guest(route('login'));
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
$guard = array_get($exception->guards(), 0);
switch ($guard) {
case 'super':
$login = 'caja.sucursal';
break;
default:
$login = '/';
break;
}
return redirect()->guest(route($login))->with('flash','Por favor Inicia Sesión');
}
}
-
最后,这里是一个视图片段,它应该访问控制器的登录功能:
namespace App\Http\Controllers\Super\AuthSuper;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
class LoginController extends Controller
{
/**
* Where to redirect users after login.
*
* @var string
*/
//protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest:super')->except('logout');
}
public function showIndex(){
return view('caja.sucursal');
}
public function login(Request $request)
{
$this->validate($request, [
'email' => 'required|email',
'password' => 'required|min:6'
]);
$credential = [
'email' => $request->email,
'password' => $request->password
];
// Attempt to log the user in
if (guard()->attempt($credential)){
// If login succesful, then redirect to their intended location
return redirect()->intended(route('caja.home'));
}
// If Unsuccessful, then redirect back to the login with the form
data
return redirect()->back()->withInput($request->only('email', 'remember'));
}
public function logout(){
Auth::guard('super')->logout();
return redirect('/sucursal')->with('flash','Se ha cerrado la Sesión');;
}
public function guard()
{
return Auth::guard('super');
}
}
<form role="form" action="{{ route('caja.login')}}" method="POST">
{{ csrf_field() }}
<div class="form-group {{ $errors->has('rut') ? 'has-error':''}}">
<label class="sr-only" for="r-form-1-name">RUT</label>
<input type="text" name="rut" placeholder="Rut..." class="r-form-1-name form-control" id="r-form-1-name" value="{{ old('rut')}}">
{!! $errors->first('rut','<span class="help-block">:message</span>') !!}
</div>
<div class="form-group {{ $errors->has('password') ? 'has-error':''}}">
<label class="sr-only" for="r-form-1-email">CONTRASEÑA</label>
<input type="password" name="password" placeholder="Contraseña..." class="r-form-1-email form-control" id="r-form-1-email">
{!! $errors->first('password','<span class="help-block">:message</span>') !!}
</div>
<p class="terms">
* Olvidaste la Contraseña?
<!--<a href="#" class="launch-modal"
data-modal-id="modal-terms">Presiona aquí</a>-->
<a href="{{
route('caja.password.resetter') }}">Presiona aquí</a>
</p>
<center>
<a class="btn" href="
{{route('caja.home')}}">ENTRAR</a>
</center>
</form>
我知道这是很多,但我已经做了所有的事情,除了完全重做(我仍然要做,不会说谎),但我所有的搜索都证明是徒劳的。我确信一定有一些小东西我错过了,即使它就在我眼前,但它一直在逃避我。解决方案是什么?
Route::prefix('sucursal')->group(function(){
Route::get('/', 'Super\AuthSuper\LoginController@showIndex')->name('caja.sucursal');
Route::get('/home','Super\CajaController@home')->name('caja.home');
Route::post('/login', 'Super\AuthSuper\LoginController@login')->name('caja.login');
Route::post('/logout', 'Super\AuthSuper\LoginController@logout')->name('caja.logout');
Route::get('/password/reset', 'Super\AuthSuper\ForgotPasswordController@showLinkRequestForm')->name('caja.password.resetter');
Route::post('/password/email', 'Super\AuthSuper\ForgotPasswordController@sendResetLinkEmail')->name('caja.password.email');
Route::get('/password/reset/{token}', 'Super\AuthSuper\ResetPasswordController@showResetForm')->name('caja.password.reset');
Route::post('/password/request', 'Super\AuthSuper\ResetPasswordController@reset')->name('caja.password.request');
Route::post('buscar-rut', 'Super\CajaController@buscarRut');
});