重定向页面时 Laravel Auth 会话丢失

Posted

技术标签:

【中文标题】重定向页面时 Laravel Auth 会话丢失【英文标题】:Laravel Auth session losing when redirect pages 【发布时间】:2014-07-26 00:51:46 【问题描述】:

我对 laravel 会话有身份验证问题。 (它之前在同一系统中工作)

这是我的用户控制器

public function postLogin()

    $username = Input::get("username");
    $password = Input::get("password");
    $credentials = array
    (
        "username"=> $username,
        "password" => $password,
    );
    if (Auth::attempt($credentials)) 
    
        echo Auth::user()->username;
        exit();

    
    else
    
        return Redirect::to("user/login")->with("error_msg","Giriş Başarısız! <br>Lütfen girdiğiniz bilgileri kontrol edip yeniden deneyin.");
    

它返回用户名.. 但是当我重定向页面会话丢失。

public function postLogin()

    $username = Input::get("username");
    $password = Input::get("password");
    $credentials = array
    (
        "username"=> $username,
        "password" => $password,
    );
    if (Auth::attempt($credentials)) 
    
        return Redirect::to('check_login');

    
    else
    
        return Redirect::to("user/login")->with("error_msg","Giriş Başarısız! <br>Lütfen girdiğiniz bilgileri kontrol edip yeniden deneyin.");
    

还有我的路线:

Route::get("check_login",function()
    echo Auth::user()->username;
);

结果:

ErrorException
Trying to get property of non-object
echo Auth::user()->username;

【问题讨论】:

检查您的 session.php 配置文件。 domainpath 设置是否与您的开发环境匹配? 我检查了 session.php 它们是默认设置 'path' => '/', 'domain' => null, 您在使用虚拟主机环境吗?什么是会话驱动程序?如果您尝试登录http://localhost/myproject/public/ 之类的网址或类似的网址,则可能是问题所在。 我不在虚拟主机中工作。我的会话驱动器是文件。 Url 是一个真实的域。当我在它工作之前对其进行测试时。 【参考方案1】:

检查您的路线以获取postLogin() 功能。如果你在UserController中使用,它应该在post方法下面。

Route::post('login', array('uses' => 'UserController@postLogin'));

您提供的功能和路线与我完美配合,但如果您想检查用户是否保存在会话中,请尝试这样。

if (Auth::check())

    echo 'My user is logged in';

如果你能提供你正在使用的所有路线,那就更好了。

【讨论】:

【参考方案2】:

使用数据库会话,更多信息:http://laravel.com/docs/5.0/session#database-sessions

我遇到了同样的问题。并发现我的代码有问题

在我的控制器中:

public function login(Request $request)
    //assign $request data to session
    Session::put('price',$request->price);

public function checkLogin()
    if(login fail)
    redirect back to login
    

当我重定向到登录会话时覆盖为空,因为当我重定向时,$request 为空 所以“价格”是空的

所以我在放入会话之前检查会话是否已经获得了价值

public function login(Request $request)
    //check session already got value
    if(Session::get('price') == "")

    //assign $request data to session
    Session::put('price',$request->price);
    

问题为我解决了。

希望对遇到同样问题的人有所帮助

【讨论】:

以上是关于重定向页面时 Laravel Auth 会话丢失的主要内容,如果未能解决你的问题,请参考以下文章

使用Laravel 5.7中的Auth激活用户会话时重定向到页面的方法

在 Laravel 5.8 中会话过期时重定向到其他路由

使用 django python-social-auth 重定向后会话值丢失

laravel 4.2在重定向时重新生成会话

作者会话的 Laravel 更改重定向部分过期

如何在laravel 5.5中会话时自动重定向到登录页面