我对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
更新:
我已经尝试在身份验证后放置dd(auth()->user());
,并且我已经看到了经过身份验证的用户的属性。但是,将其放在Dashboard Controller上后,它将返回NULL。有人可以帮我这个吗?
答案 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');
通过这种方式,只有经过身份验证的用户才能看到仪表板页面。