【问题标题】:Laravel Authentication - Auth::check returns FALSELaravel 身份验证 - Auth::check 返回 FALSE
【发布时间】:2018-04-18 04:14:06
【问题描述】:

我对@9​​87654325@ 还很陌生,我目前正在为我的项目进行手动身份验证。
我已经尝试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 

当前结果:

预期结果:

更新: 我尝试在身份验证后放置dd(auth()-&gt;user());,并且我已经看到了经过身份验证的用户的属性。但是,将它放在仪表板控制器上后,它返回 NULL。有人可以帮我解决这个问题吗?

【问题讨论】:

  • 它应该可以工作,代码中没有问题。如果视图被缓存,请使用此命令 php artisan view:clear
  • 我试图清除它,不幸的是它仍然没有显示
  • 在视图中试试这个:auth()->check() 或 \Auth::check()
  • 似乎仍然不起作用。 ☹️
  • 身份验证后您是否进入仪表板页面?并删除控制器顶部的行:使用 Auth;然后尝试。

标签: php laravel laravel-5.6


【解决方案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 列设置为用户数据库中的主键,则需要将以下代码放入 User 模型中:

protected $primaryKey = 'user_id';

【讨论】:

    【解决方案2】:

    实际上您的身份验证工作正常,因为您可以在用户身份验证时打印 hello。 如果您想阻止未经身份验证的用户访问,您可以这样做。 将此函数添加为控制器的第一个函数

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

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

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

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

    【讨论】:

    • 它进行身份验证并转到仪表板页面,但是,带有 if 条件的视图的某些部分仍然没有显示
    • 我没有任何错误。我已将图像添加到问题中,以显示我所拥有的预期结果和当前结果。
    • 嗨,“Hello User”是我想要的,也是我所期望的,但是,它目前在验证后没有显示,如另一张图片所示。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-03
      • 1970-01-01
      • 2018-01-07
      • 2017-06-12
      • 2015-03-03
      • 2018-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多