【问题标题】:laravel manually authenticate userlaravel 手动认证用户
【发布时间】:2021-07-06 00:14:54
【问题描述】:

我想在 laravel 8 中手动登录一个用户。问题是认证成功,但是认证的用户没有存储在会话中(或者会话没有更新)。我使用de docs中给出的方法。

我的 loginController 有两种方法:1)显示登录表单和 2)执行登录

<?php

namespace App\Http\Controllers;

use App\Http\Requests\LoginRequest;
use App\Models\User;
use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{

public function login(){
    return view('auth/login');
}

public function validateLogin(LoginRequest $request){
    
    if (Auth::attempt(['email'=>$request->email, 'password'=>$request->password])) {
        $request->session()->regenerate();
        return redirect()->to('/');
    }      
    return back()->withErrors(['credentials' => 'Deze gegevens zijn niet bekend!']);      
    }
}

控制器确实重定向到 / ,因此用户通过了身份验证,但在重定向后,经过身份验证的用户不可用,因此它没有存储在会话中。

有人知道怎么解决吗?

【问题讨论】:

  • 你为什么不使用这个特性呢? Illuminate\Foundation\Auth\AuthenticatesUsers
  • 我正在使用this,首先我检查电子邮件和密码,然后使用用户 ID Auth::loginUsingId($id); 验证用户
  • @BABAKASHRAFI 如果没有脚手架身份验证系统,该特征在 laravel 8 中不可用,
  • @KvdLingen,你为什么不使用laravel ui 包安装它的脚手架?
  • @EsTeAa 尝试在 auth::attempt 后登录用户,但这也没有解决我的问题。脚手架一定有一些文档中没有的东西。

标签: laravel authentication laravel-8


【解决方案1】:

我从 User 模型中删除了 id,因为我想使用电子邮件地址作为主键。这违反了 Authenticable 特性,因此会话没有更新。

用户模型需要以下函数来将 id 替换为电子邮件:

public function getKeyName(){
    return 'email';
}

同样可以通过:

protected $primaryKey = 'email';

public $incrementing = false;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 2023-03-19
    • 2018-01-29
    相关资源
    最近更新 更多