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

Laravel未定义变量username问题求助:登录后无法展示用户名

Laravel Session登录用户名显示问题修复

我查了很多相关方案,还是遇到用户变量未定义的问题。想通过Session实现登录,在dashboard页面显示用户名,相关代码如下:

原MainController代码

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class MainController extends Controller
{
    function login1(Request $request){
      $username = $request->input('username');
      $password = $request->input('password');


      $data = DB::table('users')->where(['username'=>$username, 'password'=>$password])->get();
      if(count($data)>0){
       $request->session()->put('username',$data);
        return redirect('dashboard');
      }
else{
    
        echo "error";
    
        $notification = array(
                'message' => 'User Does not Exists!',
                'alert-type' => 'error'
            );
            return back()->with($notification);
      
      
      
}
}}

原dashboard.blade.php代码

@extends('layouts.theme')
@section('content')
<style type="text/css">
    .form-control {
        margin-bottom: 10px;

    }
    label{
        font-size: 13px;
        font-weight: bold;
    }
    .disabled{
        background-color: #dddddd;
    }
    select.form-control{
        padding: 0;
        cursor: pointer;
    }
    table{
        font-size: 13px;
    }
    .wellcometext{
        font-family: sans-serif;
        font-size: 28px;
        text-align: center;
        margin-top: 250px;
        color: black;
    }
    .slogon {
        font-size: 18px;
        text-align: center;
        font-family: sans-serif;
        color: black;
    }
    .wellcometext:hover{
  transition: transform .5s;
    }
    .modal-backdrop {
   background-color: black;}
</style>
<div class="container">
    <h4 class="wellcometext"><b>Welcome To The Hospital Information System.</b></h4>
    <h6 class="slogon">Future Is Integration.</h6><br>
    <h2 class="wellcometext"><B>{{session('username')}}</b><h2>
</div>

@endsection

原web.php路由代码

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\login;
use App\Http\Controllers\MainController;
use Illuminate\Http\Request;

/*
|--------------------------------------------------------------------------
| 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('/', function () {
    return view('login');
});
//Route::view('login','login');
Route::view('dashboard','dashboard');
//Route::view('logout','logout');


Route::get('/welcome', function () {
    return view('welcome');
});

Route::get('/cancelorder', function () {
    return view('cancelorder');
});




Route::post('add',[login::class, 'add']);

Route::get('login1','App\Http\Controllers\MainController@login1');


Route::get('/logout',function(){
    if (session()->has('login1'))
    {
        session ()->pull('login1',null);
    }
    return redirect ('login');
});


Route::get('/login',function(){
    if (session()->has('login1')){
        return redirect ('dashboard');
    }
    return redirect ('login');
});

错误分析与修复步骤

  1. Session存储错误:get()返回的是Laravel集合对象,不是单个用户数据,应改用first()获取单条记录,且仅存储用户名字段而非整个集合。
  2. 路由逻辑问题:
    • 登录接口用GET请求不安全,需改为POST;
    • dashboard路由直接返回视图,未校验Session,未登录用户可直接访问;
    • 登出、登录路由的Session判断键为login1,但实际存储的键是username,逻辑不匹配;
    • /login路由存在循环重定向问题,判断后仍跳转至自身。
  3. Blade模板输出问题:直接输出{{session('username')}}未判断Session是否存在,若存储的是集合/对象会导致异常。

修复后的代码

MainController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class MainController extends Controller
{
    function login1(Request $request){
        $username = $request->input('username');
        $password = $request->input('password');

        // 使用first()获取单个用户记录,而非get()返回的集合
        $user = DB::table('users')->where(['username'=>$username, 'password'=>$password])->first();
        
        if($user){
            // 仅存储用户名到Session
            $request->session()->put('username', $user->username);
            return redirect('dashboard');
        } else {
            $notification = array(
                'message' => '用户不存在或密码错误!',
                'alert-type' => 'error'
            );
            return back()->with($notification);
        }
    }
}

web.php(路由)

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\login;
use App\Http\Controllers\MainController;
use Illuminate\Http\Request;

Route::get('/', function () {
    return view('login');
});

// 改为控制器方法访问dashboard,增加Session校验
Route::get('dashboard', function(){
    if(!session()->has('username')){
        return redirect('/');
    }
    return view('dashboard');
});

Route::get('/welcome', function () {
    return view('welcome');
});

Route::get('/cancelorder', function () {
    return view('cancelorder');
});

Route::post('add',[login::class, 'add']);

// 登录改为POST请求,提升安全性
Route::post('login1',[MainController::class, 'login1']);

Route::get('/logout',function(){
    if (session()->has('username')){
        session()->pull('username');
    }
    return redirect('/');
});

// 修复循环重定向问题
Route::get('/login',function(){
    if (session()->has('username')){
        return redirect('dashboard');
    }
    return view('login');
});

dashboard.blade.php

@extends('layouts.theme')
@section('content')
<style type="text/css">
    .form-control {
        margin-bottom: 10px;

    }
    label{
        font-size: 13px;
        font-weight: bold;
    }
    .disabled{
        background-color: #dddddd;
    }
    select.form-control{
        padding: 0;
        cursor: pointer;
    }
    table{
        font-size: 13px;
    }
    .wellcometext{
        font-family: sans-serif;
        font-size: 28px;
        text-align: center;
        margin-top: 250px;
        color: black;
    }
    .slogon {
        font-size: 18px;
        text-align: center;
        font-family: sans-serif;
        color: black;
    }
    .wellcometext:hover{
        transition: transform .5s;
    }
    .modal-backdrop {
        background-color: black;
    }
</style>
<div class="container">
    <h4 class="wellcometext"><b>Welcome To The Hospital Information System.</b></h4>
    <h6 class="slogon">Future Is Integration.</h6><br>
    <!-- 先判断Session存在性,再输出用户名 -->
    @if(session()->has('username'))
        <h2 class="wellcometext"><B>{{ session('username') }}</b></h2>
    @endif
</div>

@endsection

额外提示

  • 密码安全:禁止明文存储密码,应使用Hash::make()加密密码,登录时用Hash::check()验证。
  • 中间件优化:可使用Laravel自带的auth中间件简化登录校验,无需手动判断Session。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:45:35