Laravel 4 AUTH通过AJAX,可能的会话问题

时间:2014-05-07 15:17:49

标签: php ajax authentication laravel laravel-4

我之前在使用Sentry 2的项目中完成了它,但我无法使用内置的Auth功能。

用户存储方法:

public function store()
{
    $validation = new Services\Validators\User;

    if ($validation->passesForStore()) {
        // Create a new user
        $user = new User;
        $user->name     = Input::get('name');
        $user->password = Input::get('password');
        $user->email    = Input::get('email');
        $user->save();

        // Authenticate the user
        Auth::loginUsingId($user->id);

        return JSend::success([
            'redirect' => URL::action('VaultController@index')
        ]);
    }

    // Provide a custom message for an e-mailaddress that's already in use
    $message = '';
    if ($validation->hasFailed('email', 'unique')) {
        $message = 'This e-mailaddress has already been taken';
    }

    return JSend::fail([
        'failed' => $validation->failedFields(),
        'message' => $message
    ]);
}

AJAX响应处理程序:

// Redirect to given URL
if (typeof response.data.redirect != 'undefined') {
    window.location = response.data.redirect;
}

用户已成功创建,在Auth::check();结果loginUsingId后直接放置true,但只要window.location重定向该页面,{{1} }结果为false并且用户未登录,即使手动导航到其他页面也不会。

App.session设置:

Auth::check()

请记住,登录方法以类似的方式工作,但也不起作用! (它可以在不使用AJAX的情况下工作)

===更新===

生活变得有点怪异了。 我现在可以使用我的登录和注册方法登录。 改变了什么?我为我以前的localhost项目添加了一个vhost别名,似乎登录了 工作正常。 (听起来像环境问题?)。

但是注销不起作用。我为测试目的创建了以下路由:

'lifetime' => 120,
'expire_on_close' => true,

结果如预期的那样Route::get('logout', function(){ Auth::logout(); Session::flush(); dd(Auth::check()); }); 。然而!如果我然后转到我的登录页面,我会被重定向。访问我下面的其他调试路径会产生false,这绝对是绝对的 没有任何意义。用户未使用'记住'标志。

true

此时任何输入都受到高度赞赏:)

===更新2 ===

以前的成功尝试似乎只是一个侥幸。我手动登录后登录或注销不起作用。有什么方法可以调试这种黑魔法吗?

===更新3 ===

今天我再次尝试了我的应用程序,并且无法写入会话文件xxxx错误。我检查了我的storage / sessions文件夹,发现没有这样的文件。

我清空了存储/会话文件夹,清除了所有缓存,并且登录和奇怪 我以前退出的问题已经消失了。

即使主要问题已经解决(目前),我仍然想知道导致这个问题的原因

1 个答案:

答案 0 :(得分:0)

这个问题的答案可以在类似的帖子中找到,谢谢@Razor!

laravel 4 persisting data ongoing - jquery ajax submit