Laravel Auth::try 工作,然后 Auth::check 失败


Laravel Auth::attempt works and then Auth::check fails

我是Laravel的新手,并且一直在学习有关身份验证的教程,但有些东西不起作用。身份验证::尝试似乎工作正常。当它失败时,我被重定向回登录并出现错误,当它成功时,我被重定向到我的博客索引。可悲的是,在那之后我无法访问任何受保护的页面!我只是被重定向回我的登录页面。这让我发疯了!

我在博客索引视图中转储了一些变量,当 Auth::try 成功查看发生了什么时,该视图会呈现:

@section('content')
<h1>This is a blog!!</h1>
<?php
    echo var_dump(Session::all());
    echo var_dump(Auth::check());
    foreach($posts as $post) { ?>
        <div class="post">
        <?php
            echo "<h3><a href='"/blog/$post->slug'">{$post->title}</a></h3>";
            echo "{$post->content}";
        ?>
        </div>
    <?php } ?>
@stop

当我var_dump会话::all()时,我得到这个数组:

array(4) { ["_token"]=> string(40) "0hqRso6my0VpvQVtrXlLDeKioglu4xNXl5pbpNGM" ["flash"]=> array(2) { ["old"]=> array(0) { } ["new"]=> array(0) { } } ["url"]=> array(1) { ["intended"]=> string(49) "http://temporal-storm-743.appspot.com/blog/create" } ["login_82e5d2c56bdd0811318f0cf078b78bfc"]=> NULL }

当我 var 转储 Auth::check 我得到 false: bool(false)

我将假设 NULL 之后login_ur4iafo9awhatever意味着会话尚未成功登录用户?

我没有更改应用于受保护页面的身份验证过滤器,从过滤器.php中的默认值。

我已经检查了我的会话.php文件:

'driver' => 'memcached',
'lifetime' => 120,
'expire_on_close' => false,

和我的身份验证.php

'driver' => 'eloquent',
'model' => 'User',

和我的模型....

class User extends Eloquent implements UserInterface, RemindableInterface {
  use UserTrait, RemindableTrait;
  public $timestamps = false;
  protected $table   = 'WebUser';
  protected $primaryKey   = 'WebUserId';
  protected $hidden   = array('password', 'remember_token');
}

当然还有我的登录控制器方法:

public function doLogin()
{
    $rules = array(
        'email'=>'required|email',
        'password'=>'required|min:8'
    );
    $validator = Validator::make(Input::all(), $rules);
    if( $validator->fails() )
        return Redirect::back()->withInput(Input::except('password'))->withErrors($validator);
    $userdata = array(
        'email'=>Input::get('email'),
        'password'=>Input::get('password'),
    );
    if ( !Auth::attempt($userdata, true) )
        return Redirect::back()->withErrors(['email'=>'Login failed.']);
   return Redirect::to('blog');
}

我不知道你们发生了什么。

编辑:我对现在发生的事情有一些想法,你们。

假期后我回到了这个问题,并开始在身份验证文件和论坛中闲逛,并尝试了几种不同的身份验证方法。我让身份验证工作了!

我仍然不是100%确定为什么,但是Eloquent驱动程序似乎不适用于Google App Engine。从 Eloquent 更改为数据库身份验证后,更新我的数据库以使所有主键都设置为 id 并将remember_token VARCHAR(100) NULL添加为字段,事情似乎身份验证很好。

也许有更多Laravel经验并且更了解不同提供商和身份验证如何工作的人可以帮助我理解为什么只有数据库身份验证在Google应用引擎上工作?

我遇到了同样的问题,并搜索了几个小时的解决方案。

然后我改变了:

if(Auth::check()) return Redirect::to("/admin");

自:

if( ! Auth::guest()) return Redirect::to("/admin");

这对我有用.. :)

我认为拉拉维尔有一个错误。 如果您使用 Auth::try 它来验证您的凭据,则返回 true 并"销毁会话"。所以我们重定向我们的 url 并使用 Auth::check() 所以它返回 false。因为会话被破坏并且您丢失了要检查的数据。