【问题标题】:auth()->attempt($request->only('email','password')) - Not Workingauth()->attempt($request->only('email','password')) - 不工作
【发布时间】:2021-09-16 00:43:43
【问题描述】:

**

这是我的 LoginController.php :

**

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class LoginController extends Controller
{
    public function login()
    {

        return view('auth.login');
    }

    public function loginCheck(Request $request)
    {
        $this->validate($request,[

            'email' => 'required|email',
            'password' => 'required',
        ]);


        if(!auth()->attempt($request->only('email','password'))){
            return back()->with('status','Invalid login details');
        }

        return redirect()->route('dashboard');
    }
}

Login.blade.php - 设计

@extends('layouts.app')

@section('content')
    <div class="flex justify-center">
        <div class="w-4/12 bg-white p-6 rounded-lg">

            @if (session('status'))
                <div class="bg-red-500 p-4 rounded-lg mb-6 text-white text-center">
                    {{ session('status') }}
                </div>
            @endif

            <form action="{{ route('login')}}" method="post">
                @csrf

                 <div class="mb-4">
                     <label for="email" class="sr-only">Email</label>
                     <input type="text" name="email" id="email" placeholder="email"
                     class="bg-gray-100 border-2 w-full p-4 rounded-lg @error('email') border-red-500 @enderror" 
                     value="{{ old('email') }}">

                     @error('email')
                     <div class="text-red-500 mt-2 text=sm">{{ $message }}</div>
                    @enderror
                 </div>
 
                 <div class="mb-4">
                     <label for="password" class="sr-only">Passowrd</label>
                     <input type="password" name="password" id="password" placeholder="password"
                     class="bg-gray-100 border-2 w-full p-4 rounded-lg @error('password') border-red-500 @enderror"
                      value="{{ old('password') }}">

                     @error('password')
                     <div class="text-red-500 mt-2 text=sm">{{ $message }}</div>
                    @enderror
                 </div>

 
                 <div class="mb-4">
                     <button type="submit" class="bg-blue-500 text-white px-4 py-3 rounded font-medium w-full">Log in
                     </button>
                 </div>
             </form>
        </div>
    </div>
@endsection

web.php -路由

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Auth\RegisterController;
use App\Http\Controllers\Auth\LoginController;
use App\Http\Controllers\DashboardController;

Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');

Route::get('/posts',[RegisterController::class, 'posts'])->name('posts');

Route::get('/register',[RegisterController::class, 'registration'])->name('register');
Route::post('/register',[RegisterController::class, 'store']);

Route::get('/login', [LoginController::class, 'login'])->name('login');
Route::post('/login', [LoginController::class, 'loginCheck']);


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

即使我尝试 dd(); 它显示我是假的,

auth()->用户();在仪表板中显示为空?

但数据正在存储在 MySql Server 中。 但不是 auth()->attemp()-> 登录。为什么?

在这里,我在注册为新用户并直接登录并重定向到仪表板页面时尝试将我的数据存储到 MySql 服务器。

【问题讨论】:

  • 实际上不知道这是否重要,但-&gt;only() 是否需要数组?

标签: php laravel authentication


【解决方案1】:

上面的好像没有问题。

查看mysql查询日志,查询是否正常进入。

【讨论】:

    【解决方案2】:

    您的代码在控制器中使用 Laravel 刀片指令,而不是使用 Laravel 提供的 Auth 外观。

    主要是在控制器顶部添加use Illuminate\Support\Facades\Auth;,然后切换

    if(!auth()->attempt($request->only('email','password'))){
                return back()->with('status','Invalid login details');
            }
    

    if(!Auth::attempt($request->only('email','password'))){
                return back()->with('status','Invalid login details');
            }
    

    您还应该考虑将auth 中间件添加到您的仪表板路由。

    有关在 Laravel 中手动验证用户的更多信息,请访问:https://laravel.com/docs/8.x/authentication#authenticating-users - 包括重新生成会话和正确的重定向,您应该将其添加到控制器中。

    希望这会有所帮助! :D

    【讨论】:

      【解决方案3】:

      要在仪表板中使用 auth()-&gt;user(),您必须使用 Auth 中间件保护到该页面的路由。如果你不这样做,它每次都会一直返回 null

      Route::get('/dashboard', [DashboardController::class, 'index'])->middleware('auth')->name('dashboard');
      

      另外,请考虑在 Auth 尝试后重新生成会话。为了安全起见

      $request->session()->regenerate()
      

      我希望这会有所帮助。快乐编码!

      【讨论】:

        猜你喜欢
        • 2016-10-10
        • 2017-03-10
        • 2014-06-20
        • 2018-06-24
        • 1970-01-01
        • 2021-03-21
        • 1970-01-01
        • 2014-08-31
        • 2013-02-27
        相关资源
        最近更新 更多