认证不适用于laravel 5.4

时间:2017-03-27 18:11:55

标签: php laravel

在RegisterController中我写了

$user=User::create([ ... ]); 
Auth::login($user); 
$myid = Auth::id(); 
return redirect()->route('profile',['id'=>$myid]),

然后我重定向到带有新ID的页面。

在web.php中我写了

Route::get('/profile/{id}','ProfileController@show')->name('profile');

但在ProfileController节目中,我写了dump(Auth::user())并显示'null',我尝试了会话。但是会话没有保存,它也显示'null'。我试图更改Kernel.php,但它没有帮助。虽然Laravel自动使用这个中间件,但我尝试将所有路由转移到中间件网络。当然,它也没有帮助。我有这个问题。

2 个答案:

答案 0 :(得分:2)

你应该这样检查:

dd(Auth::user());

或者:

dd(auth()->user());

而不是这样:

dump(Auth::user)

答案 1 :(得分:0)

我建议使用Auth::attempt($credentials);方法,而不是直接调用Auth :: login()。

Auth::attempt($credentials);

将尝试使用提供的凭据登录用户并构建会话,并且如果成功则返回true,如果失败则返回false。所以你可以马上测试你的结果。

查看文档:{​​{3}}

您还可以使用Auth::guard([any-guard])->attempt($credentials)指定警卫。如果您没有将名称传递给guard(),它将使用默认防护。

另一个重要的事情是,您必须在创建密码并将其传递给新用户之前对其进行哈希处理。因为像attempt()这样的所有方法都会尝试匹配密码的散列版本。您可以像这样哈希密码:

Hash::make(<your-password>);

请记住在文件的标题中添加use Hash;或在类名前添加反斜杠,如下所示:\Hash::make(<your-password>)

PS:这仅适用于用户创建时间。因为Auth::attempt()会自动散列密码。这意味着您无需担心在将密码传递给身份验证之前对其进行哈希处理。