Логин laravel не работает с предоставленными учетными данными в производстве. На самом деле он ничего не возвращает и снова перенаправляет на страницу входа

Я использую php artisan bootstrap --auth для создания представлений для моей аутентификации.

Проблема

Однако я не могу войти в систему, используя страницу входа, предоставленную кодом. Все работает нормально на локальном компьютере, но на рабочем сервере просто перенаправляется на страницу входа, несмотря на предоставление правильных или неправильных учетных данных.

логин.blade.php


<form method = "POST" action = "{{ route('login') }}" class = "row g-3">

    @csrf

    <div class = "col-12">

      <label for = "username" class = "form-label">{{ __('username') }}</label>

      <input id = "username" type = "username" class = "form-control form-control-lg @error('username') is-invalid @enderror"

        name = "username" value = "{{ old('username') }}" required autocomplete = "username" autofocus>

      @error('username')

        <span class = "invalid-feedback" role = "alert">

          <strong>{{ $message }}</strong>

        </span>

      @enderror

    </div>

    <div class = "col-12">

      <label for = "password" class = "form-label">{{ __('password') }}</label>

      <input id = "password" type = "password" class = "form-control form-control-lg @error('password') is-invalid @enderror"

        name = "password" required autocomplete = "current-password">

      @error('password')

        <span class = "invalid-feedback" role = "alert">

          <strong>{{ $message }}</strong>

        </span>

      @enderror

    </div>

    <div class = "col-12">

      <div class = "form-check d-flex align-items-center">

        <input class = "form-check-input me-3" type = "checkbox" name = "remember" id = "remember"

          {{ old('remember') ? 'checked' : '' }}>

        <label class = "form-check-label" for = "remember">

          {{ __('مرا به خاطر بسپار') }}

        </label>

      </div>

    </div>

    <div class = "col-12">

      <button type = "submit" class = "btn btn-lg btn-primary me-3">

        {{ __('login') }}

      </button>

      <a href = "{{ route('register') }}" class = "btn btn-lg btn-ghost-pink">

signup

      </a>

    </div>

  </form>

Логинконтроллер.php

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller
{
    use AuthenticatesUsers;
    protected $redirectTo = RouteServiceProvider::HOME;
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }
}

конфиг/auth.php

<?php

return [


    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],


    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
    ],
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],
    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
    ],

    'password_timeout' => 10800,

];

предоставляется .env на производстве

DB_CONNECTION=***
DB_HOST=***
DB_DATABASE=***
DB_USERNAME=***
DB_PASSWORD=***
DB_PORT=***
APP_ENV=production
APP_DEBUG=false
APP_KEY=base64:JFFvM6+apX5aMU6VOXaLhSiim49nob5m3Rf6zpUM/mc
LOG_CHANNEL=errorlog
APP_URL=https://charbanshimi.iran.liara.run
SESSION_DRIVER=file
SESSION_LIFETIME=1440
SESSION_DOMAIN=charbanshimi.iran.liara.run
SESSION_SECURE_COOKIE=false
  • Я пробовал то, что было упомянуто здесь как правильный ответ до сих пор. Но это не решило проблему.

  • Я уже протестировал цикл req/res в браузере. Но отправка формы входа, похоже, не работает даже с неверными учетными данными, и сервер просто перенаправляет на страницу входа, и я не нашел причин для такого поведения.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Laravel по умолчанию не поставляется с именами пользователей для входа в систему, они принимают только электронные письма, но вы можете заставить его принимать имя пользователя или адрес электронной почты.

Требование, у вас должно быть поле username в таблице users!


Измените в своем лезвии поле следующим образом: я просто добавил проверку на наличие ошибок в полях имени пользователя или электронной почты и чтобы возвращалось старое значение поля имени пользователя или электронной почты.

<input id = "username" type = "text" class = "form-control form-control-lg @error('username', 'email') is-invalid @enderror " name = "username" value = "{{ old('username') ?: old('email') }}" required autocomplete = "username" autofocus>

В вашем LoginController измените и добавьте следующее!

public function __construct()
{
    $this->middleware('guest')->except('logout');
    $this->username = $this->useUsername();
}

public function useUsername()
{
    $username = request()->input('username');
 
    $fieldType = filter_var($username, FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
 
    request()->merge([$fieldType => $username]);
 
    return $fieldType;
}
 

public function username()
{
    return $this->username;
}

Другие вопросы по теме