Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 01.07.2015 20:13:20

Как запретить авторизацию отключенным пользователям ?

В таблице где хранятся все данные о пользователях, я добавил поле "active".
Значение поля "0" или "1".
Если установлено 0 - то у пользователя не получится авторизоваться .
Есть статья в мануале, но у меня не получается.
Может кто-то делал ?

Не в сети

#2 02.07.2015 09:11:09

Re: Как запретить авторизацию отключенным пользователям ?

если используется стандартная авторизация — просто добавь к передаваемым в attempt полям active => 1.

Не в сети

#3 02.07.2015 11:05:02

Re: Как запретить авторизацию отключенным пользователям ?

middleware ?

Не в сети

#4 02.07.2015 15:30:27

Re: Как запретить авторизацию отключенным пользователям ?

constb пишет:

}%если используется стандартная авторизация - просто добавь к передаваемым в %%attempt%% полям %%active => 1%%.

Я не смог разобраться.
Можете показать пример.

Не в сети

#5 02.07.2015 15:30:54

Re: Как запретить авторизацию отключенным пользователям ?

hzone пишет:

middleware ?



И с проверкой middleware я не смог разобраться.
Можете показать пример.

Не в сети

#6 02.07.2015 17:36:32

Re: Как запретить авторизацию отключенным пользователям ?

constb пишет:

}%если используется стандартная авторизация - просто добавь к передаваемым в %%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']);
    }

}



Это контролер.

Не в сети

#7 03.07.2015 11:17:30

Re: Как запретить авторизацию отключенным пользователям ?

PHPuse 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' => ];
    }

Не в сети

#8 04.07.2015 14:24:45

Re: Как запретить авторизацию отключенным пользователям ?

Держи пример, он правда под ajax, но в остальном неплохо подходит под твой случай.

Сначала я пытался оверрайтить трейты, потом понял, что проще отделить функционал.

Не в сети

#9 04.07.2015 15:15:17

Re: Как запретить авторизацию отключенным пользователям ?

constb пишет:

}%%%(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)

Не в сети

#10 04.07.2015 15:22:02

Re: Как запретить авторизацию отключенным пользователям ?

constb пишет:

}%%%(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'
Больше не чего не трогал.

Не в сети

#11 04.07.2015 15:40:45

Re: Как запретить авторизацию отключенным пользователям ?

Возможно кормишь фигню методу, этому например:
$credentials = $request->only('email', 'password', ['active' => '1' ]);

3-й аргумент там не знаю, что делает.

Не в сети

#12 04.07.2015 15:52:01

Re: Как запретить авторизацию отключенным пользователям ?

constb пишет:

}%%%(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)

Не в сети

#13 04.07.2015 18:51:06

Re: Как запретить авторизацию отключенным пользователям ?

Ну да, нужно скормить Auth::attemt-у массив с тремя значениями. Дальше оно само.

Если терзают сомнения — попрыгай по трейтам. Там подписано все.

Не в сети

#14 06.07.2015 07:31:46

Re: Как запретить авторизацию отключенным пользователям ?

$credentials = $request->only('email', 'password') + ['active' => '1' ];

Не в сети

Подвал раздела