如何解决Laravel 8 - 使用 AuthCheck 中间件,只是尝试检查会话中的用户名,但它给出了一个错误错误描述如下
使用 AuthCheck 中间件并尝试在会话中检查 Has Username 但它给出错误错误说明如下
错误 错误异常 尝试读取字符串 LoginController 上的属性“headers” C:\xampp\htdocs\larave8auth\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\VerifyCsrftoken.PHP:191
<?PHP
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use App\Models\User;
use Illuminate\Support\Facades\Session;
class LoginController extends Controller
{
function login()
{
return view('login.login');
}
function checkLogin(request $request)
{
$validate=$request->validate([
'email'=>'required|email','password'=>'required|min:5|max:15'
]);
$user=User::where('email','=',$request->email)->first();
if(!$user)
{
return back()->with('fail','we don\'t recognised your email');
}
else
{
if(Hash::check($request->password,$user->password))
{
Session::put('username',$request->email);
return redirect('/dashboard');
}
else
{
return back()->with('fail','Password don\'t match');
}
}
}
function dashboard()
{
return view('login.dashboard');
}
}
?>
AuthCheck.PHP
<?PHP
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class AuthCheck
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request,Closure $next)
{
if($request->session()->has('username'))
{
return "true";
}
else
{
return "false";
}
}
}
?>
web.PHP
<?PHP
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\LoginController;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/login',[LoginController::class,'login']);
Route::post('/checkLogin','checkLogin'])->name('checkLogin');
Route::group(['middleware'=>['AuthCheck']],function(){
Route::get('/user',[UserController::class,'index']);
Route::get('/dashboard','dashboard']);
});
?>
解决方法
因为你的中间件只是返回一个字符串,而不是一个重定向。当您希望允许系统继续提前处理请求时,您确实会返回 $next($request);
或 return abort(404);
。您的中间件必须返回一个 Response
对象,或 $next($request)
:
public function handle(Request $request,Closure $next)
{
if (session()->has('username')) {
return $next($request);
} else {
return abort(404);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。