Регистрация Laravel в Auth не работает

Я пытаюсь зарегистрировать пользователя с аутентификацией, которую предоставляет Laravel, и я не могу. Также я делаю логин и регистрацию в том же виде (индекс). С помощью кнопки я изменяю взгляды для входа или регистрации. Все это произошло в сиденав

Это мои маршруты:

//Auth routes
Route::get('/home', 'HomeController@home')->name('home');

Route::view('/', 'layouts/index');

Route::view('/profile', 'layouts/profile');
Route::get('/welcome', 'UserController@getUsers');

    // Authentication Routes
Route::post('/', 'Auth\LoginController@login');
Route::post('/', 'Auth\LoginController@logout')->name('logout');

// Registration Routes...
Route::post('/', 'Auth\RegisterController@create')->name('register');

Это вид регистрации:

    <button type="button" id="registGoBackButton" class="btn accessButtons goBackButton" style="display:block;"><i class="fas fa-chevron-left"></i></button>
  <div class="row user-view">
    <blockquote  style="margin-top:0px; margin-bottom:30px;"><h3 style="margin-top:0px; margin-bottom:30px;">Register</h3></blockquote>
    <form class="" action="{{ route('register') }}" method="POST">
      @csrf
      <div class="input-field col s6">
        <input name="name" id="registName" type="text" class="validate" required value="">
        <label for="name">{{ __('Name') }}</label>
      </div>
      <div class="input-field col s6">
        <input name="username" id="registUsername" type="text" class="validate" required value="{{ old('username') }}">
        <label for="username">{{ __('Username') }}</label>
      </div>
      <div class="input-field col s12">
        <input name="email" id="registEmail" type="email" class="validate" required value="">
        <label for="email">{{ __('Email') }}</label>
      </div>
      <div class="input-field col s12">
        <input name="password" id="registPassword" type="password" class="validate" required>
        <label for="password">{{ __('Password') }}</label>
      </div>
     <button class="col s4 btn waves-effect #00796b teal darken-2" type="submit" name="action" style="margin-top:30px;">Submit
        <i class="material-icons"></i>
      </button>
    </form>
  </div>

И это мой регистрационный контроллер:

<?php

namespace App\Http\Controllers\Auth;

use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;

class RegisterController extends Controller
{

    use RegistersUsers;

    /**
     * Where to redirect users after registration.
     *
     * @var string
     */
    protected $redirectTo = 'welcome';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|string|max:255',
            'username' => 'required|string|max:225|unique:users',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return \App\User
     */
    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'username' => $data['username'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
        ]);
    }
}

2 ответа

Проблема связана с действием контроллера. Ваша форма должна быть отправлена ​​на RegisterController@register функция, а не create() функция. Итак, просто измените ваш маршрут на:

// Registration Routes...
Route::post('/', 'Auth\RegisterController@register')->name('register');

Если вы посмотрите на свой RegisterControllerвы заметите, что он включает в себя RegistersUsers черта, которая содержит register() метод:

/**
 * Handle a registration request for the application.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function register(Request $request)
{
    $this->validator($request->all())->validate();

    event(new Registered($user = $this->create($request->all())));

    $this->guard()->login($user);

    return $this->registered($request, $user)
                    ?: redirect($this->redirectPath());
}

Не уверен, почему вы используете array $data в вашем create метод, но если вы замените

protected function create(array $data)

с

protected function create(Request $request)

Кроме того, убедитесь, что

use Illuminate\Http\Request;

в верхней части вашего контроллера, затем используйте

return User::create([
  'name' => $request->input('name'),
  'username' => $request->input('username'),
  'email' => $request->input('email'),
  'password' => Hash::make($request->input('password')),
]);

вместо $data['{variable}'],

Так как ваш POST маршрут подключен, он автоматически отправляет Request возражать против метода, который его обрабатывает, но вы объявляете его как массив и обращаетесь к нему неправильно.

Также в настоящее время protected function validate() не вызывается, так как нет маршрута, связанного с ним. Переместить это в create():

protected function create(Request $request){

  $this->validate($request->all(), [
    'name' => 'required|string|max:255',
    'username' => 'required|string|max:225|unique:users',
    'email' => 'required|string|email|max:255|unique:users',
    'password' => 'required|string|min:6|confirmed',
  ]);
  ...
}

Sidenote: Похоже, это должен быть контроллер ресурсов, подключенный через Route::resource(), но я не уверен; Я не использую их лично.

Полный RegisterController будет выглядеть так:

<?php

Пространство имен App\Http\Controllers\Auth;

use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request;

class RegisterController extends Controller {
    protected function create(Request $request){
        $this->validate($request->all(), [
            'name' => 'required|string|max:255',
            'username' => 'required|string|max:225|unique:users',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
        ]);

        $user = User::create([
            'name' => $request->input('name'),
            'username' => $request->input('username'),
            'email' => $request->input('email'),
            'password' => Hash::make($request->input('password')),
        ]);

        return back()->with(["status" => "success", "message" => "User Created!");
        // Accessible on the frontend via `session()->get("message", "");`
    }
}
Другие вопросы по тегам