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

时间:2015-12-05 18:02:30

标签: ajax laravel

我正在使用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返回404false或任何不是图像的内容时,JS会再次发送请求。注销后,Laravel仍然有一个要处理的图像请求,response('Image not found', 404)被触发after我的注销成功,然后当response包含登录的会话信息时,我的浏览器会间接记录回来了。

Haven尚未找到解决方案。不确定如何去做。

0 个答案:

没有答案