Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
В Laravel 5.6 необходимо сделать следующие.
Есть форма авторизации - обрабатывает LoginController, в моем случае я поменяла email на name, и остался password.
Если такой пользователь есть с таким паролем, то авторизую его, а если пользователя нет с таким именем и паролем, то нужно зарегистрировать с данными которые были введены.
Вот class LoginController
<?php
namespace App\Http\Controllers\Auth;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
protected function redirectTo()
{
return '/';
}
public function username() {
return 'name';
}
/**
* Handle a failed authorization attempt.
*
* @return void
*
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
protected function sendFailedLoginResponse(Request $request)
{
// Что то нужно сделать чтоб зарегить пользователя
}
}
Я думала переопределить функцию sendFailedLoginResponse чтоб в этот момент регистрировать пользователя. Запустить как то RegisterController и передать данные с POST запроса.
Подскажите как нужно реализовать данную идею?
Не в сети
Сделала вот так:
public function login(Request $request)
{
$this->validate($request, [
'name' => 'required|string',
'password' => 'required|string'
]);
$user = User::firstOrCreate([
'name' => $request->name
], [
'name' => $request->name,
'password' => Hash::make($request->password)
]);
if ($user && Hash::check($request->password, $user->password)) {
auth()->loginUsingId($user->id);
return redirect()->intended('/');
} else {
throw ValidationException::withMessages([
$this->username() => [trans('auth.failed')],
]);
}
}
Не в сети
Получается если я опечатался в логине, мне без вопросов "на лету" создадут ещё один аккаунт с неправильным логином? Боюсь, как пользователь этого сайта я был бы слегка ошарашен.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Вроде бы зашел... но как бы где моё всё? Вот какая у меня была бы реакция: "#$%@ *&^% !!!"
Изменено artoodetoo (29.08.2018 13:02:43)
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Я понимаю такую реакцию. Нужно понимать, что разработчики пилят по ТЗ, а не на свое усмотрение.
Не в сети
На практике я встречаю обратный кейс:
После формы регистрации с логином и паролем может произойти просто вход, если я ввёл учетные данные уже существующего пользователя. Есть три варианта развития событий при регистрации (а не при входе):
а) Пользователь уже есть. Пароль верный. Молча логинит.
б) Пользователь уже есть, но с другим паролем. Будет перенаправление на форму входа с сообщением об ошибочном пароле.
в) Такого пользователя ещё не было. Создается учетка, пользователь становится залогиненным, появляется новая форма приглашающая ввести необязательные параметры профиля.
Изменено artoodetoo (29.08.2018 13:14:19)
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Я понимаю такую реакцию. Нужно понимать, что разработчики пилят по ТЗ, а не на свое усмотрение.
У разработчиков есть голос. Последнее слово за заказчиком, но он сам будет недоволен, если за его деньги создадут ерунду. Надо уточнять.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети