Laravel身份验证 - Auth :: check返回FALSE

时间:2018-04-18 04:14:07

标签: php laravel laravel-5.6

我对Laravel相当陌生,我目前正在为我的项目进行手动认证。
我已经尝试Auth::attempt来验证已输入的凭据,并且我已经看到它可以工作,因为我在被验证时被重定向到我想要的页面。

但是,当我尝试在我被重定向到的视图中执行Auth::check时,它似乎返回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 

目前的结果: enter image description here

预期成果: enter image description here

更新: 我已经尝试在身份验证后放置dd(auth()->user());,并且我已经看到了经过身份验证的用户的属性。但是,将其放在Dashboard Controller上后,它将返回NULL。有人可以帮我这个吗?

3 个答案:

答案 0 :(得分:1)

检查用户数据库的主键。如果您设置的表格的主键不是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';

答案 1 :(得分:0)

为什么不使用Laravel的验证&amp;在函数authenticated中编写自己的代码。

仅供参考,需要调用函数attemptLogin以便用户可以登录。

答案 2 :(得分:0)

实际上您的身份验证工作正常,因为您可以在用户身份验证时打印问候语。 如果您想阻止未经身份验证的用户的访问,您可以执行此操作。 添加此功能作为控制器的第一个功能

public function __construct()
    {
        $this->middleware('auth');
}

或者您可以检查路线中的用户

Route::get('admin/profile', function () {
    //
})->middleware('auth');

通过这种方式,只有经过身份验证的用户才能看到仪表板页面。