Laravel 5.6 - проверка отправки в индекс, а не на предыдущую страницу с ошибками

При отправке формы в register.blade.php вы будете перенаправлены обратно в индекс, а не на исходную страницу с отображаемыми ошибками. Я не уверен, почему это так.

Вызывается метод create в контроллере, но выполнение останавливается после проверки (как и ожидалось). Там нет перенаправления обратно к индексу, поэтому я не уверен, почему он решил вернуться туда. Насколько я понимаю, по умолчанию он перенаправляет обратно на форму с ошибками.

Маршруты:

<?php

Route::get('/', function () {
    return view('pages.index');
});

Route::get('/home', function () {
    return redirect('/');
});

// Login //
Route::get('/user/login', function () {
    return view('pages.user.login');
});
Route::post('/user/login', 'UserController@store');

// Register //
Route::get('/user/register', function () {
    return view('pages.user.register');
});
Route::post('/user/register', 'UserController@create');
Route::post('/user/register', 'UserController@create');

// Logout //
Route::get('/user/logout', 'UserController@destroy');

регистр.blade.php

@extends ('layout.master')

@section ('content')

<div class="row">
    <div class="col-md-12">
        <h1 align="center">User Registration</h1>
        <br>
        <form method="POST" action="/user/register">

            {{ csrf_field() }}

            <div class="form-group row">
                <label for="name" class="col-sm-2 col-form-label">Full Name</label>
                <div class="col-sm-10">
                    <input name="name" type="text" class="form-control" placeholder="Full Name">
                </div>
            </div>

            <div class="form-group row">
                <label for="phonenumber" class="col-sm-2 col-form-label">Phone Number</label>
                <div class="col-sm-4">
                    <input name="phonenumber" type="tel" class="form-control" placeholder="Phone Number">
                </div>

                <label for="password" class="col-sm-2 col-form-label">Password</label>
                <div class="col-sm-4">
                    <input name="password" type="password" id="password" class="form-control">
                </div>
            </div>

            <div class="form-group row">
                <label for="email" class="col-sm-2 col-form-label">Email</label>
                <div class="col-sm-4">
                    <input name="email" type="email" class="form-control" placeholder="Email">
                </div>

                <label for="password_confirmation" class="col-sm-2 col-form-label">Confirm Password</label>
                <div class="col-sm-4">
                    <input name="password_confirmation" type="password" id="password_confirmation" class="form-control">
                </div>
            </div>

            <div class="form-group row">
                <label for="street_address" class="col-sm-2 col-form-label">Street Address</label>
                <div class="col-sm-10">
                    <input name="street_address" type="text" class="form-control" placeholder="Street Address">
                </div>
            </div>

            <div class="form-group row">
                <label for="city" class="col-sm-2 col-form-label">City / Town</label>
                <div class="col-sm-10">
                    <input name="city" type="text" class="form-control" placeholder="City / Town">
                </div>
            </div>

            <div class="form-group row">
                <label for="region" class="col-sm-2 col-form-label">State / Province / Region</label>
                <div class="col-sm-10">
                    <input name="region" type="text" class="form-control" placeholder="State / Province / Region">
                </div>
            </div>

            <div class="form-group row">
                <label for="zip" class="col-sm-2 col-form-label">Postal Code</label>
                <div class="col-sm-10">
                    <input name="zip" type="text" class="form-control" placeholder="Postal Code">
                </div>
            </div>

            <div class="text-center">
                <button type="submit" class="btn btn-primary text-center">Submit</button>
            </div>

        </form>

        <br>

        @include('layout.errors')
    </div>
</div>

@endsection

ошибки.blade.php

@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

Контроллер:

<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
    // Register
    public function create(Request $request)
    {
        // Form Validation
        $this->validate(request(), [
            'name' => 'required',
            'email' => 'required|email|unique:users',
            'phonenumber' => 'required|regex:/^[0-9]{10}$/|unique:users',
            'street_address' => 'required',
            'city' => 'required',
            'region' => 'required',
            'zip' => 'required',
            'password' => 'required|confirmed'
        ]);

        // Create and save the user.
        $user = User::create([
            'name' => request('name'),
            'email' => request('email'),
            'phonenumber' => request('phonenumber'),
            'street_address' => request('street_address'),
            'city' => request('city'),
            'state' => request('state'),
            'zip' => request('zip'),
            'password' => bcrypt(request('password'))
        ]);

        // Sign in the user.
        //auth()->login($user);

        return redirect('/test');
    }

    // Login
    public function store()
    {
        if (auth()->attempt(request(['email', 'password'])))
        {
            return redirect('/');
        } 
        else 
        {
            return Redirect::back()->withErrors(['Invalid email or password!']);
        }       
    }

    // Logout
    public function destroy()
    {
        auth()->logout();

        return redirect('/user/login');
    }
}

person Liam Bull    schedule 09.03.2018    source источник


Ответы (3)


У меня была точно такая же проблема. Чтобы уточнить самостоятельный ответ OP, эта проблема вызвана ключом конфигурации Firefox network.http.referer.trimmingPolicy, который управляет отправленным заголовком Origin.

В моем случае этот ключ был установлен на (int) 2, что заставляет браузер отправлять только адрес веб-сайта без URI.

Изменение ключа на (int) 0 решило проблему (можно попробовать установить его на (int) 1).

person Ra'Jiska    schedule 01.05.2020
comment
1 тоже работает. См.: wiki.mozilla.org/Security/Referrer. - person Saibamen; 07.12.2020

Проблема была с моими настройками конфигурации Firefox. Есть такая вещь, как стать СЛИШКОМ приватным...

person Liam Bull    schedule 22.03.2018
comment
Я использую почтальона. но когда я отлаживаю валидатор, он обходит все и показывает мою страницу приветствия. - person ali Falahati; 28.04.2020

Для некоторых людей, которые могут столкнуться с этим. У меня был настроен метатег referrer с политикой content="origin".

Это делает так, что перенаправления всегда будут ссылаться на ваше «происхождение».

Изменить <meta name="referrer" content="origin"> на <meta name="referrer" content="origin-when-cross-origin">

Подробнее читайте в этой статье.

person Danoctum    schedule 22.08.2020