【问题标题】:Laravel Auth not working, everything seems to be correctLaravel Auth 不起作用,一切似乎都是正确的
【发布时间】:2014-05-29 09:57:06
【问题描述】:

下面是我的控制器代码...

    if(Auth::attempt($userdata)){

  //echo 'dfdf';
  //exit;
        return Redirect::to('mydata');
    }

如果我取消注释它会显示dfdf...所以这意味着 Auth 很好.. 对吗??好吧,这是我的 routes.php 代码...

 Route::get('mydata', function()
 {
   return View::make('mydata');})->before('auth');

即使这样也有效...如果我从 routes.php 中删除 ->before('auth'); 公共函数 doLogin() {

    return Redirect::to('mydata');
    exit;
     }

that means even router is fine right?

如果我删除before('auth');,路由无需登录即可工作,这似乎连路由都可以,那么return Redirect::to('mydata'); 的问题是什么,为什么它没有重定向??即使经过身份验证,它也会卡在登录页面上......

【问题讨论】:

  • @pc-shooter 是的,它可以工作......但如果我删除before('auth');,让我更新我的问题......
  • @pc-shooter 在不使用before('auth'); 的情况下重定向到数据是没有用的,在这种情况下我什至不必登录对吗??

标签: php laravel laravel-4


【解决方案1】:

在 cmets 之后编辑:

在控制器中,将重定向更改为::intended

if(Auth::attempt($userdata)){
    return Redirect::intended('mydata');
}

来自docs

Redirect::intended 函数会将用户重定向到他们所访问的 URL 在被身份验证捕获之前尝试访问 筛选。如果 预定目的地不可用。

API:

intended(string $default = '/', int $status = 302, array $headers = array(), bool $secure = null)

并且您不需要将->before('auth') 添加到您的View调用中,因为您将重定向到mydata如果Auth::attempt 返回true

因此,将您的路线更改为:在 cmets 后编辑感谢 Juan Antonio Orozco 指出这一缺陷!

Route::get('mydata', array('before' => 'auth', function() {
      return View::make('mydata');
});

而且,顺便说一句,在 return 之后添加 exit 是不必要的,因为解释器已经使用 return 命令离开了函数,所以它甚至不会被执行。

【讨论】:

  • 将'before'过滤器传递给路由属性和调用before()方法是一样的。
  • ammm 但是如果用户猜到了应该仅供登录用户使用的路由的 url 怎么办?应该保护该页面免受未经身份验证的用户的影响
  • @JuanAntonioOrozco 谢谢指点。你是对的!编辑了我的答案。如果你是反对者,你能改变一下吗?
【解决方案2】:

您可以像这样在路由中使用身份验证过滤器。


Route::get('mydata', array('before' => 'auth', function()
{

  return View::make('mydata');

}));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    • 2019-10-04
    相关资源
    最近更新 更多