【发布时间】:2015-03-03 01:50:31
【问题描述】:
正如标题所说,Laravel 的函数Auth::attempt() 在以下代码部分返回true(不重要的部分被删除):
public function doLogin()
{
$validator = [..]
if ($validator->fails()) {
[..]
} else {
$userdata = array(
'username' => Input::get('username'),
'password' => Input::get('password')
);
if (Auth::attempt($userdata, true)) {
return Redirect::to('/');
} else {
return Redirect::to('login');
}
}
}
但是当我们被重定向时,我们会尝试检查用户是否真的使用Auth::check() 登录,并以某种方式返回false。
我们在 Google 上尝试了所有可能的解决方案,但都没有成功。例如,我们添加了一个remember_token,但它并没有改变任何东西,尽管它证明了Auth::attempt() 做了一些事情,因为remember_token 是在数据库中设置的。
作为最后的手段,我们甚至尝试在 ./vendor/laravel/framework/src/Illuminate/Auth/Guard.php 的 Laravel 的 Auth::attempt() 方法中打印一些东西,但我们没有看到任何东西,即使是 print_r。我们试图在完整的代码库中找到其他尝试函数,但没有找到。
可能是因为将 User 更改为它的翻译形式会导致其损坏,但函数 Auth::attempt() 也可能会损坏。
似乎真的发生了一些神奇的事情,但我们不知道是什么或如何发生的。其他人有想法吗?
【问题讨论】:
-
在
app/config/auth.php你设置了哪个驱动?在app/config/session.php中设置了哪个驱动程序? -
您可能对导致其行为不端的文件拥有一些权限。尝试修改
app/storage/sessions目录的权限。如果这不起作用,请查看它是否可以通过使用不同的会话驱动程序来工作。 -
一般会话有效吗?
Session::put('foo', 'bar')并在另一个请求中Session::get('foo') -
嗯。所以会话不是问题。也许
remember选项在这里搞砸了。你试过Auth::attempt($userdata)吗? -
@Renzeee 我今天遇到了类似的问题。您是否在模型中定义了主键?因为我没有在
User模型中定义主键,并且在定义主键之后一切对我来说都很好。所以试试这个。也许这会对你有所帮助。
标签: php authentication laravel