Laravel по-русски

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

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

#1 23.05.2016 12:39:51

Помогите с аутентификацией

Пишу ручками простую аутентификацию, используя присутствующие в Laravel инструменты.
Кто может помочь объяснить, что следует делать после того, как сверил существует ли данынй пользователь в бд и совпадает ли его пароль. Смотрел на эту статью но так и не понял, как правильно объявить юзера залогиненым и как сделать так, что бы до логаута он везде числился авторизованным. Просто ход мыслей подскажите хотя бы, а я уже как-то додумаю.

Не в сети

#2 23.05.2016 15:17:03

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: Помогите с аутентификацией

Зачем заного изобритать велосипед? Авторизация и регистрация доступны из коробки

Не в сети

#3 23.05.2016 15:55:50

Re: Помогите с аутентификацией

TrueKanonir пишет:

Зачем заного изобритать велосипед? Авторизация и регистрация доступны из коробки

Я и пытаюсь пользоваться этой авторизацией, но всё равно непонятно как работать с переменными.

Не в сети

#4 23.05.2016 19:13:22

Re: Помогите с аутентификацией

Authentication
Authorization

какие проблемы с прочтением и пониманием ?

Не в сети

#5 23.05.2016 20:53:43

Re: Помогите с аутентификацией

hzone, у нас вообще-то есть документация на русском:

Не в сети

#6 23.05.2016 21:31:30

Re: Помогите с аутентификацией

hzone пишет:

Authentication
Authorization

какие проблемы с прочтением и пониманием ?

Я знаю что есть документация. И всю прочитал уже несколько раз и тщательно ознакомился. Допустим: нужно ли использовать сессии для авторизации, если пользоваться стандартными инструментами авторизации?

Не в сети

#7 23.05.2016 22:02:08

Re: Помогите с аутентификацией

Какие дополнительные сессии?, уже всё реализовано
В методе где делаешь ручную аутентификацию используешь метод attempt
\Auth::attempt([
'email' => $request->get('email'),
'password' => $request->get('password')
]) - если авторизация через имейл, если вдруг по другому -  то указываешь другое поле вместо email

И потом используешь фасад \Auth с нужными методами:
\Auth::user() - получить пользователя (модель)
\Auth::check() - проверка что аутентифицирован пользователь
\Auth::id() - получить id пользователя
и т.д.

Не в сети

#8 23.05.2016 22:04:52

Re: Помогите с аутентификацией

123 пишет:

Какие дополнительные сессии?, уже всё реализовано
В методе где делаешь ручную аутентификацию используешь метод attempt
\Auth::attempt([
'email' => $request->get('email'),
'password' => $request->get('password')
]) - если авторизация через имейл, если вдруг по другому -  то указываешь другое поле вместо email

И потом используешь фасад \Auth с нужными методами:
\Auth::user() - получить пользователя (модель)
\Auth::check() - проверка что аутентифицирован пользователь
\Auth::id() - получить id пользователя
и т.д.

спасибо. Примерно так и представлял.

Не в сети

#9 23.05.2016 22:18:03

Re: Помогите с аутентификацией

возникла ошибка:

Call to undefined method Illuminate\Database\Query\Builder::attempt()
namespace App\Http\Controllers\Auth;
use App\User;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
use Illuminate\Support\Facades\Input;
use App\Models\AuthModel;
use App\Models\Trainer;

Что я забыл подключить? Просто вроде как подключил всё как в примере.

Изменено laravelNewbie (23.05.2016 22:18:19)

Не в сети

#10 24.05.2016 07:48:40

Re: Помогите с аутентификацией

Тут проблема не в подключении, ты вызываешь метод через фасад БД, а не \Auth.
Покажи код где идёт вызов attempt()

Не в сети

#11 24.05.2016 15:53:16

Re: Помогите с аутентификацией

123 пишет:

Тут проблема не в подключении, ты вызываешь метод через фасад БД, а не \Auth.
Покажи код где идёт вызов attempt()

Да, я тогда затупил и беледерду написал. Но теперь у меня новая проблема: при попытке аутентификации attempt возвращает false, хотя введённые данные совпадают с данными с БД.

 
protected function postLogin()
{
        $email = Input::get('email');
        $pass = Input::get('password');

        if (Auth::attempt(['email' => $email, 'password' => $pass])) 
        {
            return redirect()->intended('dashboard');
        }
        else
        {
            return redirect()->intended('login');
        }
}

Не смотря на то, что вводимый юзер и пароль совпадает, меня всё равно перенаправляет на login, когда должно на dashboard. Где искать проблему?

Изменено laravelNewbie (24.05.2016 15:55:46)

Не в сети

#12 24.05.2016 16:13:41

Re: Помогите с аутентификацией

Поскольку этот форум малёха баганный, и я немогу исправить свой предыдущий пост, то напишу здесь: возможно это связано с тем, что согласно документации "Если пользователь будет найден, хешированный пароль, сохранённый в базе данных, будет сравниваться с хешированным значением password", но у меня пароли пока не хешированы. Судя по всему оно хеширует вводимый пароль, а потом ищет его в бд, но там пока что не хешированые поли. Видимо отсюда и проблема. Вот правда с хешированием я ещё пока не разобрался.

Не в сети

#13 24.05.2016 16:28:05

Re: Помогите с аутентификацией

PS: так всё и было. надо было хранить хешированые пароли что я и сделал. Что бы не плодить несколько тем, у меня остался один
ВОПРОС:
у меня помимо таблицы users, есть ещё одна таблица, которую так же следует проверять на совпадение почты и пароля. Как и где мне стоит добавить эту таблицу, что бы при роботе Auth::attempt и прочего, проверялись две таблицы, а не только юзерс.
Об этом сказано в файл auth.php, где написано

    | If you have multiple user tables or models you may configure multiple
    | sources which represent each model / table. These sources may then
    | be assigned to any extra authentication guards you have defined.

Как правильно это записать(как я понимаю всё в том же аuth.php)?

Не в сети

#14 04.06.2016 14:51:37

nemocoder
Откуда: Almaty, Kazakhstan
Сообщений: 69

Re: Помогите с аутентификацией

laravelNewbie пишет:
    | If you have multiple user tables or models you may configure multiple
    | sources which represent each model / table. These sources may then
    | be assigned to any extra authentication guards you have defined.

Возможно вам стоит сделать так
в auth.php где guards

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'some_guard' => [
            'driver' => 'session',
            'provider' => 'some_provider',
        ],
        
    ],

providers ->

'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
        'some_provider' => [
            'driver' => 'eloquent',
            'model' => App\SomeModel::class,
        ],
]

ну и перед тем как проверять меняете

 Auth::attemp() 

на

 $frst = auth()->guard('web'); $scnd= auth()->guard('some_guard'); 

вот так например делится разная авторизация. Вам стоит попробовать по экспериментировать

Изменено nemocoder (04.06.2016 14:52:45)

Не в сети

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