Laravel 身份验证 - Auth::check returns 错误
Laravel Authentication - Auth::check returns FALSE
我是 Laravel
的新手,目前正在为我的项目进行手动身份验证。
我已经尝试 Auth::attempt
来验证已输入的凭据,并且我已经看到它有效,因为我在经过身份验证时被重定向到我想要的页面。
但是,当我尝试在重定向到的视图中执行 Auth::check
时,它似乎 returns FALSE 并且没有读取经过身份验证的用户。这使得该视图的特定部分不可见。对此有任何见解吗?非常感谢!
控制器
namespace App\Http\Controllers;
use DB;
use Session;
use Illuminate\Http\Request;
use Auth;
class LoginController extends Controller
{ //
public function index()
{
return view('view_login');
}
public function verify(Request $request)
{
$credentials = $request->only('username', 'password');
if (Auth::attempt($credentials)) {
// Authentication passed...
return redirect('dashboard');
}
else
{
return redirect('/');
}
}
查看
@if (Auth::check())
<li><a href="dashboard.html"> Hello {{ Auth::user()->username }} </a></li>
@endif
当前结果:
预期结果:
更新:
我试过在认证后放dd(auth()->user());
,我看到了认证用户的属性。但是,将它放在仪表板控制器上之后,它 returns NULL。有人可以帮我解决这个问题吗?
为什么不使用 Laravel 的验证并在函数 authenticated 中编写自己的代码。
仅供参考,需要调用函数 attemptLogin 以便用户可以登录。
实际上您的身份验证工作正常,因为您可以在用户通过身份验证时打印 hello。
如果您想阻止 未经身份验证的用户 的访问,您可以这样做。
将此函数添加为控制器的第一个函数
public function __construct()
{
$this->middleware('auth');
}
或者你可以在路由中查看用户
Route::get('admin/profile', function () {
//
})->middleware('auth');
通过这种方式,只有经过身份验证的用户才能看到仪表板页面。
检查用户数据库的主键。如果您设置 table 的主键而不是 id
,您需要在您的用户模型中设置它。
Laravel 文档说明如下:
Eloquent will also assume that each table has a primary key column named id. You may define a protected $primaryKey property to override this convention.
例如,如果您将 user_id 列设置为用户数据库中的主键,则需要在用户模型中放置以下代码:
protected $primaryKey = 'user_id';
我是 Laravel
的新手,目前正在为我的项目进行手动身份验证。
我已经尝试 Auth::attempt
来验证已输入的凭据,并且我已经看到它有效,因为我在经过身份验证时被重定向到我想要的页面。
但是,当我尝试在重定向到的视图中执行 Auth::check
时,它似乎 returns FALSE 并且没有读取经过身份验证的用户。这使得该视图的特定部分不可见。对此有任何见解吗?非常感谢!
控制器
namespace App\Http\Controllers;
use DB;
use Session;
use Illuminate\Http\Request;
use Auth;
class LoginController extends Controller
{ //
public function index()
{
return view('view_login');
}
public function verify(Request $request)
{
$credentials = $request->only('username', 'password');
if (Auth::attempt($credentials)) {
// Authentication passed...
return redirect('dashboard');
}
else
{
return redirect('/');
}
}
查看
@if (Auth::check())
<li><a href="dashboard.html"> Hello {{ Auth::user()->username }} </a></li>
@endif
当前结果:
预期结果:
更新:
我试过在认证后放dd(auth()->user());
,我看到了认证用户的属性。但是,将它放在仪表板控制器上之后,它 returns NULL。有人可以帮我解决这个问题吗?
为什么不使用 Laravel 的验证并在函数 authenticated 中编写自己的代码。
仅供参考,需要调用函数 attemptLogin 以便用户可以登录。
实际上您的身份验证工作正常,因为您可以在用户通过身份验证时打印 hello。 如果您想阻止 未经身份验证的用户 的访问,您可以这样做。 将此函数添加为控制器的第一个函数
public function __construct()
{
$this->middleware('auth');
}
或者你可以在路由中查看用户
Route::get('admin/profile', function () {
//
})->middleware('auth');
通过这种方式,只有经过身份验证的用户才能看到仪表板页面。
检查用户数据库的主键。如果您设置 table 的主键而不是 id
,您需要在您的用户模型中设置它。
Laravel 文档说明如下:
Eloquent will also assume that each table has a primary key column named id. You may define a protected $primaryKey property to override this convention.
例如,如果您将 user_id 列设置为用户数据库中的主键,则需要在用户模型中放置以下代码:
protected $primaryKey = 'user_id';