اذهب إلى المحتوى

السؤال

نشر

مرحبًا، لدي مشكلة في Laravel 10 مع خطأ في التوثيق (Auht)، بعد فشل عملية تسجيل الدخول، يظهر في متصفح الويب حالة 302 بدلاً من 433 إذا قام المستخدم بإدخال بيانات اعتماد خاطئة.

أريد مساعدة من فضلكم، وذلك هو متحكم تسجيل الدخول.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests\LoginRequest;
use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{

    public function showLogin(){
        return view("admin.login-form");
    }

    public function showLayout(){
        return view("admin.admin-layout");
    }
    public function login(LoginRequest $request)
{
    $credentials = $request->getCredentials();

    if (!Auth::validate($credentials)) {
        $error = 'Neplatné údaje!';
        return view('admin.login-form', compact('error'));
    }

    $user = Auth::getProvider()->retrieveByCredentials($credentials);

    Auth::login($user);

    return $this->authenticated($request, $user);
}


     /**
     * Handle response after user authenticated
     *
     * @param Request $request
     * @param Auth $user
     *
     * @return \Illuminate\Http\Response
     */
    protected function authenticated(Request $request, $user)
    {
        return redirect('/admin-page');

    }
}

وذلك الـ Routes

<?php

use App\Http\Controllers\AdminController;
use App\Http\Controllers\Login;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\LoginController;
use App\Http\Controllers\LogoutController;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "web" middleware group. Make something great!
|
*/

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



Route::middleware(['auth'])->group(function () {
    Route::get('/admin-page', [AdminController::class, 'showAdmin']);
    Route::get('/logout', [LogoutController::class, 'logout'])->name('logout');


});

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

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

ملف Login blade

@extends('admin.admin-layout')
@section('content')
    <section class="vh-100 gradient-custom">
        <div class="container py-5 h-100">
            <div class="row d-flex justify-content-center align-items-center h-100">
                <div class="col-12 col-md-8 col-lg-6 col-xl-5">
                    <div class="card bg-dark text-white" style="border-radius: 1rem;">
                        <div class="card-body p-5 text-center">
                            <div class="mb-md-5 mt-md-4 pb-5">
                                <h2 class="fw-bold mb-2 text-uppercase text-white">Login</h2>
                                @if (isset($error))
                                    <div class="alert alert-danger">
                                        {{ $error }}
                                    </div>
                                @endif
                                <form action="{{ route('login') }}" method="post">
                                    @csrf
                                    <div class="form-outline form-white mb-4">
                                        <input type="username" id="username" name="username"
                                            class="form-control form-control-lg" />
                                        <label class="form-label" for="username">Username</label>
                                    </div>
                                    <div class="form-outline form-white mb-4">
                                        <input type="password" id="typePasswordX" name="password"
                                            class="form-control form-control-lg" />
                                        <label class="form-label" for="typePasswordX">Heslo</label>
                                    </div>
                                    <button class="btn btn-outline-light btn-lg px-5" type="submit">Login</button>
                                </form>
                            </div>

                            <div>
                                <a href="#hero" class="text-white-50 fw-bold">Vrať se zpět na 27STD Barbershop</a>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </section>
@endsection

 

Recommended Posts

  • 0
نشر

تظهر حالة الـ 302 عادةً عندما يتم تحويل المستخدم من صفحة إلى أخرى. في حالة فشل تسجيل الدخول، يبدو أن Laravel يقوم بتحويل المستخدم إلى الصفحة الخاصة بتسجيل الدخول مرة أخرى، وذلك على الأرجح بسبب خطأ في البيانات المدخلة.

لكن هناك بعض التحسينات التي يمكن إجراؤها لتجنب ظهور حالة 302 عند فشل تسجيل الدخول.

1. استخدام `attempt` لفحص بيانات تسجيل الدخول:
   بدلاً من استخدام `validate` يمكنك استخدام `attempt` لتبسيط الأمور وتجنب الرجوع إلى الـ view يدوياً عند فشل عملية التسجيل.

   قم بتغيير هذا الكود:

   if (!Auth::validate($credentials)) {
       $error = 'Neplatné údaje!';
       return view('admin.login-form', compact('error'));
   }

   إلى: 

  if (!Auth::attempt($credentials)) {
       $error = 'Neplatné údaje!';
       return view('admin.login-form', compact('error'));
   }

بعد تطبيق هذه التحسينات، يمكنك إعادة تشغيل التطبيق والتحقق مما إذا كانت المشكلة قد حُلت.

  • 1
نشر

 

هنا بعض النقاط التي قد تساعد في حل المشكلة:

التحقق من البيانات : يبدو أنك تستخدم Auth::validate($credentials) للتحقق من صحة بيانات الاعتماد. هذا جيد، ولكن يجب التأكد من أن البيانات المرسلة صحيحة وأن الطريقة تعمل كما هو متوقع.

التعامل مع الأخطاء: عندما تفشل عملية التحقق من صحة بيانات الاعتماد، يتم إعادة توجيه المستخدم إلى نموذج تسجيل الدخول مع رسالة خطأ. يمكنك تعديل هذا السلوك لإرجاع استجابة مع رمز حالة خاص، مثل 403 أو 422. يمكنك القيام بذلك باستخدام response()->view('view.name', $data, $status).

إعدادات الطريق (Route): تأكد من أن طريق الدخول (/login) معرف بشكل صحيح وأنه لا يتعارض مع أي طرق أخرى.

التأكد من الطلب: استخدام LoginRequest يعني أنك تستخدم تحقق مخصص من الطلب. تأكد من أن قواعد التحقق وأساليب الرسائل في LoginRequest تعمل كما هو متوقع.

رسائل الخطأ: إذا كنت تريد عرض رسالة خطأ مخصصة على النموذج، يمكنك استخدام جلسات الفلاش لتمرير رسائل الخطأ، مثل return redirect()->back()->withInput()->withErrors(['error' => 'Invalid credentials']);.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...