我正在使用 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。
谁能告诉我为什么它不能成功运行?
答案 0 :(得分:0)
我修好了。因为在我的 EloquentUserProvider 中,密码在检查之前被散列,所以它至少需要 60 个字符。我认为这是不必要的,所以我改为比较 2 个字符串函数