Laravel 8 身份验证:auth::attemp 总是返回 false

时间:2021-05-23 11:21:01

标签: php laravel

我正在使用 Laravel 8 并尝试对用户进行身份验证(登录)

我的模型:

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Auth\Authenticatable;
class AccountModel extends Model implements AuthenticatableContract
{
    use HasFactory;
    use Authenticatable;
    protected $table='Accounts';
    protected $primaryKey= 'Username';
    public $incrementing = false;
    protected $fillable = ['Username','Password','RoleID','RegisteredAt','Status','updated_at','created_at'];
    public function getAuthPassword()
    {
        return $this->Password; 
    }
    public function getAuthIdentifier()
    {
        return $this->Username; 
    }
    protected $hidden = [
        'remember_token'
    ];        
}

我的控制器

<?php
namespace App\Http\Controllers\Admin;
use App\Models\AccountModel;
use App\Http\Controllers\Controller;
use Illuminate\Routing;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Cookie;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Auth;

class LogInController extends Controller
{
    function index()
    {
        return view('Admin.LogIn');
    }
    public function Username()
    {
        return 'Username';
    }
    function loginaction($usn,$pw)
    {
        $credentials = [
            'Username'=>$usn,
            'password'=>$pw,
        ];
            if (Auth::guard('admin')->attempt($credentials)) {
                $credentials->cookie()->regenerate();
                return redirect()->intended('/Admin/Home');
            }
            else
                return $credentials;
    }

config/auth.php

<?php

return [
    'defaults' => [
        'guard' => 'admin',
        'passwords' => 'admin',
    ],
    'guards' => [
        'admin' => [
            'driver' => 'session',
            'provider' => 'admin',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'admin',
            'hash' => false,
        ],
    ],
    'providers' => [
        'admin' => [
            'driver' => 'eloquent',
            'model' => App\Models\AccountModel::class,
        ],
    ],


    'passwords' => [
        'admin' => [
            'provider' => 'admin',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
    ],


    'password_timeout' => 10800,

];

迁移

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateAccountsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('Accounts', function (Blueprint $table) {
            $table->string('Username');
            $table->string('Password');
            $table->int('RoleID');
            $table->timestamp('RegisteredAt');
            $table->string('Status');
            $table->timestamp('updated_at');
            $table->timestamp('created_at');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('Accounts');
    }
}

Blade(Ajax 工作,数据发送)

  <div class="wrap-input100 validate-input" id="typeusername" data-validate="Nhập tên đăng nhập">
            <input class="input100" id="usn" type="text" name="username" placeholder="Username">
            <span class="focus-input100" data-placeholder="?‍"></span>
            <p class="error-login" style="color:red;font-size:13px;display:none;"> ! Chưa nhập tên đăng nhập </p>
        </div>
        <div class="wrap-input100 validate-input" id="typepassword" data-validate="Nhập mật khẩu">
            <input class="input100" id="psw" type="password" name="pass" placeholder="Password">
            <span class="focus-input100" data-placeholder="?"></span>
            <p class="error-login" style="color:red;font-size:13px;display:none;"> ! Chưa nhập mật khẩu </p>
        </div>
<div class="container-login100-form-btn">
            <button class="login100-form-btn" onclick="login()">Login</button>
        </div>
<script>
    function login()
    {
        var usn = $("#usn").val();
        var pass = $("#psw").val();
         $.get("{{route('bLogIn')}}/" + usn +"/" + pass , function (res) {
                if (res =='Fail')
                { 
                    $(".alerterror").css("display", "block");
                } 
                else
                    window.location.href = "{{route('bHome')}}";
            });
    }
</script>

我正在使用 Ajax 将数据从视图发送到控制器。它发送了,控制器有它,我的代码也使用 Where 子句来检查正确的表 - 我保存在我的 MySQL 数据库中的“帐户”。用户名和密码存在但尝试仍然返回false。

谁能告诉我为什么它不能成功运行?

1 个答案:

答案 0 :(得分:0)

我修好了。因为在我的 EloquentUserProvider 中,密码在检查之前被散列,所以它至少需要 60 个字符。我认为这是不必要的,所以我改为比较 2 个字符串函数