Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
В таблице где хранятся все данные о пользователях, я добавил поле "active".
Значение поля "0" или "1".
Если установлено 0 - то у пользователя не получится авторизоваться .
Есть статья в мануале, но у меня не получается.
Может кто-то делал ?
Не в сети
Не в сети
middleware ?
Не в сети
}%если используется стандартная авторизация - просто добавь к передаваемым в %%attempt%% полям %%active => 1%%.
Я не смог разобраться.
Можете показать пример.
Не в сети
middleware ?
И с проверкой middleware я не смог разобраться.
Можете показать пример.
Не в сети
}%если используется стандартная авторизация - просто добавь к передаваемым в %%attempt%% полям %%active => 1%%.
но там нет attempt
<?php namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Contracts\Auth\Registrar;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
class AuthController extends Controller {
/*
|--------------------------------------------------------------------------
| Registration & Login Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users, as well as the
| authentication of existing users. By default, this controller uses
| a simple trait to add these behaviors. Why don't you explore it?
|
*/
use AuthenticatesAndRegistersUsers;
/**
* Create a new authentication controller instance.
*
* @param \Illuminate\Contracts\Auth\Guard $auth
* @param \Illuminate\Contracts\Auth\Registrar $registrar
* @return void
*/
public function __construct(Guard $auth, Registrar $registrar)
{
$this->auth = $auth;
$this->registrar = $registrar;
$this->middleware('guest', ['except' => 'getLogout']);
}
}
Это контролер.
Не в сети
PHPuse AuthenticatesAndRegistersUsers;
вызов attempt находится в этом трейте. чтобы заменить его функции своими надо просто определить их в своём классе. если используется версия ларавеля 5.1, там определение уже вынесено из postLogin в getCredentials. В оригинале она выглядит так:
protected function getCredentials(Request $request)
{
return $request->only($this->loginUsername(), 'password');
}
видимо надо объявить свою типа:
protected function getCredentials(Request $request)
{
return $request->only($this->loginUsername(), 'password') + [ 'active' => 1 ];
}
Не в сети
Держи пример, он правда под ajax, но в остальном неплохо подходит под твой случай.
Сначала я пытался оверрайтить трейты, потом понял, что проще отделить функционал.
Не в сети
}%%%(php)use AuthenticatesAndRegistersUsers;%%
вызов attempt находится в этом трейте. чтобы заменить его функции своими надо просто определить их в своём классе. если используется версия ларавеля 5.1, там определение уже вынесено из %%postLogin%% в %%getCredentials%%. В оригинале она выглядит так:
%%(php)
protected function getCredentials(Request $request)
{
return $request->only($this->loginUsername(), 'password');
}
%%видимо надо объявить свою типа:
%%(php)
protected function getCredentials(Request $request)
{
return $request->only($this->loginUsername(), 'password') + [ 'active' => 1 ];
}
%%
Я использую версию 5,0.
Она не имеет метода loginUsername().
Ларавель ругается что не знает такого метода.
Я уже запутался что где есть, и что где нужно исправлять.
Изменено VadimLynnik (04.07.2015 15:16:13)
Не в сети
}%%%(php)use AuthenticatesAndRegistersUsers;%%
вызов attempt находится в этом трейте. чтобы заменить его функции своими надо просто определить их в своём классе. если используется версия ларавеля 5.1, там определение уже вынесено из %%postLogin%% в %%getCredentials%%. В оригинале она выглядит так:
%%(php)
protected function getCredentials(Request $request)
{
return $request->only($this->loginUsername(), 'password');
}
%%видимо надо объявить свою типа:
%%(php)
protected function getCredentials(Request $request)
{
return $request->only($this->loginUsername(), 'password') + [ 'active' => 1 ];
}
%%
Я написал так:
public function postLogin(Request $request)
{
$this->validate($request, [
'email' => 'required|email', 'password' => 'required',
]);
$credentials = $request->only('email', 'password', ['active' => '1' ]);
if ($this->auth->attempt($credentials, $request->has('remember')))
{
return redirect()->intended($this->redirectPath());
}
return redirect($this->loginPath())
->withInput($request->only('email', 'remember'))
->withErrors([
'email' => $this->getFailedLoginMessage(),
]);
}
НО он теперь ругается что -
ErrorException in Arr.php line 214: Illegal offset type in isset or empty
В модель я добавил поле 'active'
Больше не чего не трогал.
Не в сети
Возможно кормишь фигню методу, этому например:
$credentials = $request->only('email', 'password', ['active' => '1' ]);
3-й аргумент там не знаю, что делает.
Не в сети
}%%%(php)use AuthenticatesAndRegistersUsers;%%
вызов attempt находится в этом трейте. чтобы заменить его функции своими надо просто определить их в своём классе. если используется версия ларавеля 5.1, там определение уже вынесено из %%postLogin%% в %%getCredentials%%. В оригинале она выглядит так:
%%(php)
protected function getCredentials(Request $request)
{
return $request->only($this->loginUsername(), 'password');
}
%%видимо надо объявить свою типа:
%%(php)
protected function getCredentials(Request $request)
{
return $request->only($this->loginUsername(), 'password') + [ 'active' => 1 ];
}
%%
Правильно я понимаю - нужно так-же получить из БД поле "active" в lluminate\Contracts\Auth\Guard;
Да ?
Извиняюсь что спрашиваю так много. Я только начал изучать Laravel.
Изменено VadimLynnik (04.07.2015 15:52:37)
Не в сети
Ну да, нужно скормить Auth::attemt-у массив с тремя значениями. Дальше оно само.
Если терзают сомнения — попрыгай по трейтам. Там подписано все.
Не в сети
$credentials = $request->only('email', 'password') + ['active' => '1' ];
Не в сети