无法通过Laravel中的ajax请求注销

无法通过Laravel中的ajax请求注销,ajax,laravel,Ajax,Laravel,我正在使用Laravel5.1,我正在尝试设置一个简单的登录/注销系统。我可以使用以下工具轻松登录: Auth::attempt(['email' => $request->email, 'password' => $request->password]); 但是如果我尝试使用Auth::logout()通过ajax请求注销,它不会注销用户。但是,在浏览器选项卡中手动转到注销路径就可以了 注意:如果我的控制器看起来像这样: public function logout(

我正在使用Laravel5.1,我正在尝试设置一个简单的登录/注销系统。我可以使用以下工具轻松登录:

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()
清除系统会话。但无论如何,这与我更新的问题无关。