无法通过Laravel中的ajax请求注销
我正在使用Laravel5.1,我正在尝试设置一个简单的登录/注销系统。我可以使用以下工具轻松登录:无法通过Laravel中的ajax请求注销,ajax,laravel,Ajax,Laravel,我正在使用Laravel5.1,我正在尝试设置一个简单的登录/注销系统。我可以使用以下工具轻松登录: Auth::attempt(['email' => $request->email, 'password' => $request->password]); 但是如果我尝试使用Auth::logout()通过ajax请求注销,它不会注销用户。但是,在浏览器选项卡中手动转到注销路径就可以了 注意:如果我的控制器看起来像这样: public function logout(
Auth::attempt(['email' => $request->email, 'password' => $request->password]);
但是如果我尝试使用Auth::logout()通过ajax请求注销代码>,它不会注销用户。但是,在浏览器选项卡中手动转到注销路径就可以了
注意:如果我的控制器看起来像这样:
public function logout()
{
Auth::logout();
dd(Auth::user());
}
<?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);
}
}
}
let img = new Image();
img.onload = () => this.state.update ? this.setState({image: props.src}) : null;
img.src = this.props.src;
然后请求返回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);
})
编辑
我找到了问题的根源。这是一条看起来像这样的单一路线:
public function logout()
{
Auth::logout();
dd(Auth::user());
}
<?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);
}
}
}
let img = new Image();
img.onload = () => this.state.update ? this.setState({image: props.src}) : null;
img.src = this.props.src;
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']);代码>其关联的控制器如下所示:
public function logout()
{
Auth::logout();
dd(Auth::user());
}
<?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);
}
}
}
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仍然需要处理一个映像请求,并且在我的注销成功后,响应('image not found',404)
被触发,然后由于响应
包含登录的会话信息,我的浏览器间接重新登录
还没有找到解决办法。不知道该怎么做。您只需要通过ajax调用释放一个会话,它就会让您注销。我尝试了session::flush()
,但没有成功。这就是你所说的“释放会话”的意思吗?什么是会话:flush,你应该使用session\u unset否,session::flush()
清除系统会话。但无论如何,这与我更新的问题无关。你只需要通过ajax调用释放一个会话,它就会让你注销。我尝试了session::flush()
,但没有成功。这就是你所说的“释放会话”的意思吗?什么是会话:flush,你应该使用session\u unset否,session::flush()
清除系统会话。但无论如何,这与我更新的问题无关。