我正在使用Laravel 5.1,我正在尝试设置一个简单的登录/注销系统。我可以轻松登录:
Auth::attempt(['email' => $request->email, 'password' => $request->password]);
但是如果我尝试使用Auth::logout();
通过ajax请求注销,则不会注销用户。在浏览器选项卡中手动进入注销路线但效果很好。
注意:如果我的控制器如下所示:
public function logout()
{
Auth::logout();
dd(Auth::user());
}
然后请求返回null
。这应该表明用户已经注销,但如果我传递了另一个请求 - 我仍然登录。
修改
Ajax电话:
import request from 'superagent'
request.get(env.api + endpoint)
.withCredentials()
.set({
'X-Requested-With': 'XMLHttpRequest'
})
.end((err, res) => {
if (err) return reject(err);
return resolve(res.body);
})
修改
我找到了问题的根源。这是一条看起来像这样的路线:
Route::get('image/users/{image}', ['as' => 'fetch.users.images', 'uses' => 'Files@fetchUserImage']);
更改路径image/users/{image}
解决了我的问题。仍然好奇为什么这导致Auth错误?这条路线没有干扰我的任何其他路线。
修改
我上面的编辑错了。它与该路线有关,但不是命名。
我正在请求路由Route::get('image/users/{image}', ['as' => 'fetch.users.images', 'uses' => 'Files@fetchUserImage']);
中的图像,其关联的控制器如下所示:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Storage;
class Files extends Controller
{
public function __construct()
{
$this->middleware('basic');
}
public function fetchUserImage($image)
{
$image = 'users/images/' . $image;
if (Storage::disk('s3')->exists($image)) {
return response(Storage::disk('s3')->get($image), 200, ['Content-Type' => 'image/jpeg']);
} else {
return response('Image not found', 404);
}
}
}
我正在用JS这样请求图像:
let img = new Image();
img.onload = () => this.state.update ? this.setState({image: props.src}) : null;
img.src = this.props.src;
当Laravel返回404
或false
或任何不是图像的内容时,JS会再次发送请求。注销后,Laravel仍然有一个要处理的图像请求,response('Image not found', 404)
被触发after
我的注销成功,然后当response
包含登录的会话信息时,我的浏览器会间接记录回来了。
Haven尚未找到解决方案。不确定如何去做。