所以我有一个非常基本的Laravel登录脚本
$email = Input::get('email');
$password = Input::get('password');
if(Auth::attempt(array('Email'=>$email, 'password'=>$password), true)){
return Response::json(array('success' => true,'logged_in'=>Auth::check() ));
}
我使用有效的电子邮件和密码登录。我将“logged_in”作为测试放在响应数组中,并在尝试后返回true。但是,响应中不会返回“laravel_session”cookie,后续调用也不会将用户视为已登录。这只发生在我的生产服务器上,我的本地环境和测试环境都没有问题。
另外注意,我注意到Response :: json返回text / html MIME类型,而不是application / json。我不确定是什么导致了这一点,所以我只是将jQuery.ajax dataType设置为“json”来绕过它。这只发生在我的生产服务器上。我完全没有关于这个的想法,非常感谢你的帮助。
答案 0 :(得分:6)
伙计,我忘了我问了这个问题。但我最终找到了答案,这真的很傻但很重要,所以我现在就回答。
在我的一个配置文件中,有人(可能是我)在PHP文件的<?
开头之前插入了一个空格。这是在设置任何标头之前,因此不允许更改它们(意味着不能设置cookie),因为数据已经写入输出流。因此,如果您正在寻找发生这种情况的原因,请确保查找。
答案 1 :(得分:0)
可能你的控制器工作正常并且确实设置了cookie。但是你的浏览器无法保存你的cookie。由于标题域限制。
您确定您的Cookie系统运行良好吗?你能查看app / config / session.php域名字段是这样吗。
'domain' => null,
答案 2 :(得分:0)
尝试删除第二个布尔参数(Auth :: check(array,boolean))或检查您的用户表是否有remember_token列。
如果您想在应用程序中提供“记住我”功能,您可以将true作为第二个参数传递给attempt方法,这将使用户无限期地进行身份验证(或直到他们手动注销)。当然,您的users表必须包含字符串remember_token列,该列将用于存储“记住我”令牌。
此外,您的代码有缺陷(您输错了)或者您有一个奇怪的数据库结构,因为电子邮件字段是用大写字母写的。
array('Email'=>$email, 'password'=>$password)
到
array('email'=>$email, 'password'=>$password)