我正在使用Laravel自己的CSRF令牌认证......
在我的控制器中
public function __construct()
{
$this->middleware('auth')->except('login');
}
public function authenticate(Request $request)
{
$credentials = $request->only('email', 'password');
if ($token = Auth::attempt($credentials))
{
// $request->session()->regenerate();
// return response()->json(compact('token'));
return redirect()->intended('/home');
}
和路线
Route::post('/authenticate', 'AuthController@authenticate');
它正在成功登录并使用csrf token发送到主页
但我无法在身份验证方法中获取令牌。我想用它来验证REST API ...我不想使用JWT或其他Auth方法,因为我想在同一个项目中使用REST API和其他UI页面(刀片)...
您可以在laravel中使用Passport来处理Rest API的身份验证。
您可以从$request
对象获取传递的令牌。
$passedToken = $request->input('_token');
但无法保证此令牌是真实的。您必须通过将其与当前会话的令牌进行比较来确认其真实性。
$sessionToken = $request->session()->token();
if (! is_string($sessionToken) || ! is_string($passedToken) || !hash_equals($sessionToken, $passedToken) ) {
throw new \Exception('CSRF token mismatch exception');
}
return $next($request);