You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel+MySQL登录验证失败:凭据正确却无法登录

Laravel登录验证失败问题

在Laravel框架对接MySQL开发登录页面时,明明登录凭据正确,但LoginController始终执行else分支,无法完成登录,尝试多种方案无效,现附上代码寻求帮助。

LoginController代码

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;

class LoginController extends Controller
{
    public function login()
    {
        if (Auth::check()) {
            return redirect('home');
        }else{
            return view('loginKaryawan');
        }
    }

    public function actionlogin(Request $request)
{
    $data = [
        'username' => $request->input('username'),
        'password' => $request->input('password'),
    ];

    if (Auth::attempt($data)) {
        $karyawan = Auth::user();
        return redirect()->route('dashboardMO');
    } else {
        Session::flash('error', 'Username atau Password Salah. Username: ' . $data['username'] . ', Password: ' . $data['password']);
        return redirect('/');   
    }
}


    public function actionlogout()
    {
        Auth::logout();
        return redirect('/');
    }
}

KaryawanController代码

<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\karyawan;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;

class karyawanController
{
    /**
     * Display a listing of the resource.
     */
    public function index()
    {
        $karyawan = karyawan::all();

        if (count($karyawan) > 0) {
            return response([
                'message' => 'Retrieve All Success',
                'data' => $karyawan
            ], 200);
        }

        return response([
            'message' => 'Empty',
            'data' => null
        ], 400);
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        $storeData = $request->all();

        $validate = Validator::make($storeData, [
            'nama_karyawan' => 'required',
            'no_telp' => 'required',
            'username' => 'required',
            'password' => 'required',
            'gaji_karyawan' => 'required',
            'bonus' => 'required',
        ]);
        if ($validate->fails()) {
            return response(['message' => $validate->errors()], 400);
        }

        $karyawan = karyawan::create($storeData);
        return response([
            'message' => 'Add karyawan Success',
            'data' => $karyawan
        ], 200);
    }

    /**
     * Display the specified resource.
     */
    public function show(string $id_karyawan)
    {
        $karyawan = karyawan::find($id_karyawan);

        if (!is_null($karyawan)) {
            return response([
                'message' => 'karyawan found, it is ' . $karyawan->nama_karyawan,
                'data' => $karyawan
            ], 200);
        }

        return response([
            'message' => 'karyawan Not Found',
            'data' => null
        ], 404);
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, string $id_karyawan)
    {
        $karyawan = karyawan::find($id_karyawan);
        if (is_null($karyawan)) {
            return response([
                'message' => 'karyawan Not Found',
                'data' => null
            ], 404);
        }

        $updateData = $request->all();
        $validate = Validator::make($updateData, [
            'nama_karyawan' => 'required',
            'no_telp' => 'required',
            'username' => 'required',
            'password' => 'required',
            'gaji_karyawan' => 'required',
            'bonus' => 'required',
        ]);

        if ($validate->fails()) {
            return response(['message' => $validate->errors()], 400);
        }

        $karyawan->nama_karyawan = $updateData['nama_karyawan'];
        $karyawan->no_telp = $updateData['no_telp'];
        $karyawan->username = $updateData['username'];
        $karyawan->password = $updateData['password'];
        $karyawan->gaji_karyawan = $updateData['gaji_karyawan'];
        $karyawan->bonus = $updateData['bonus'];

        if ($karyawan->save()) {
            return response([
                'message' => 'Update karyawan Success ',
                'data' => $karyawan
            ], 200);
        }

        return response([
            'message' => 'Update karyawan Failed',
            'data' => null
        ], 400);
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(string $id_karyawan)
    {
        $karyawan = karyawan::find($id_karyawan);

        if (is_null($karyawan)) {
            return response([
                'message' => 'karyawan Not Found',
                'data' => null
            ], 404);
        }

        if ($karyawan->delete()) {
            return response([
                'message' => 'Delete karyawan Success ',
                'data' => $karyawan
            ], 200);
        }

        return response([
            'message' => 'Delete karyawan Failed ',
            'data' => null
        ], 400);
    }
}

Web路由代码

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\LoginController;
use App\Http\Controllers\HomeController;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/


Route::get('/', [LoginController::class, 'login'])->name('login');
Route::post('actionlogin', [LoginController::class, 'actionlogin'])->name('actionlogin');
Route::get('dashboardMO', [karyawanController::class,'index'])->name('dashboardMO')->middleware('auth');

Route::get('home', [HomeController::class, 'index'])->name('home')->middleware('auth');
Route::get('actionlogout', [LoginController::class, 'actionlogout'])->name('actionlogout')->middleware('auth');

Karyawan模型代码

<?php
namespace App\Models;

use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Authenticatable as AuthenticatableTrait;

class karyawan extends Model implements Authenticatable
{
    use HasFactory, AuthenticatableTrait;

    public $timestamps = false;
    protected $table = "karyawan";
    protected $primaryKey = "id_karyawan";

    protected $fillable = [
        'username',
        'password',
        'nama_karyawan',
        'no_telp',
        'gaji_karyawan',
        'bonus',
    ];

    public function karyawan(){
        return $this->belongsTo(karyawan::class, 'id_role');
    }
}

登录视图loginKaryawan.blade.php代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Login - Atma Kitchen</title>
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
    <div class="container"><br>
        <div class="col-md-4 col-md-offset-4">
            <h2 class="text-center"><b>ATMA KITCHEN</b><br>Login Karyawan Atma Kitchen</h3>
            <hr>
            @if(session('error'))
            <div class="alert alert-danger">
                <b>Opps!</b> {{session('error')}}
            </div>
            @endif
            <form action="{{ route('actionlogin') }}" method="post">
                @csrf
                <div class="form-group">
                    <label for="username">Username</label>
                    <input type="text" id="username" name="username" class="form-control" placeholder="Username" required="">
                </div>
                <div class="form-group">
                    <label for="password">Password</label>
                    <input type="password" id="password" name="password" class="form-control" placeholder="Password" required="">
                </div>
                <button type="submit" class="btn btn-primary btn-block">Log In</button>
                <hr>
                <p class="text-center">Lupa Password? <a href="#">Recover</a> </p>
            </form>

        </div>
    </div>
</body>
</html>

问题原因及解决方案

核心问题:密码未加密存储

Laravel的Auth::attempt()方法默认要求密码是经过哈希加密的,但你的KaryawanController在创建和更新用户时,直接将明文密码存入数据库,导致验证时无法匹配。

具体修复步骤:

  1. 修改KaryawanController的store方法:
    在创建用户前,对密码进行哈希加密:

    // 新增密码加密步骤
    $storeData['password'] = bcrypt($storeData['password']);
    $karyawan = karyawan::create($storeData);
    
  2. 修改KaryawanController的update方法:
    更新用户密码时同样需要加密:

    // 修改密码为加密后的值
    $karyawan->password = bcrypt($updateData['password']);
    
  3. 更新数据库中已存在的用户密码:
    对于之前已经存入数据库的明文密码,需要手动更新为哈希值。可以通过Laravel Tinker执行:

    php artisan tinker
    

    然后执行:

    $user = App\Models\karyawan::find(1); // 替换为目标用户ID
    $user->password = bcrypt('该用户的明文密码');
    $user->save();
    

其他补充修复:

路由中的dashboardMO缺少控制器命名空间引用,需要在路由文件顶部添加:

use App\Http\Controllers\Api\karyawanController;

内容的提问来源于stack exchange,提问作者Icy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 18:27:00