Laravel по-русски
Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Уточните, что Вы хотите сделать? Вам нужно зарегистрировать пользователя и дать ему роль администратора? Или Вам нужно, чтобы пользователь с ролью администратора мог регистрировать других пользователей? И какие именно методы ларавеля Вы использовали и что не получилось?
В AuthController с помощью postRegister я пытался зарегистрировать нового обычного пользователя, но будучи залогиненым как администратор. Когда я отправлял форму абсолютно нчиего не происходило — перенаправляло на домашнюю страницу, а в таблицу users новых пользователей не добавляло. Тогда я решил отправить эту форму не будучи залогиненым и всё прошло успешно — был добавлен новый пользователь без всяких проблем. Следовательно, я пришёл к выводу, что проблема именно в том, что Laravel не позволяет, по крайней мере по дефолту, регистрировать юзера будучи авторизованным.
Я не знаю как это решить по нормальному. Единственный вариант, который я сейчас придумал — это обрабатывать postRegister в другом каком-нибудь своём контроллере.
Ребята, каким способом можно зарегистрировать пользователя администратором. Я пробовал дефолтные методы ларавеля и ничего не получалось. Когда попробовал зарегистировать пользователя не будучи аутентифицированым, то всё сработало. Я так понял по дефолту ларавель не разрешает регистировать пользователей, если в данный момент ты залогинен. Как это можно исправить?
PS: просто у меня в таблице users есть поле role и в зависимости от этого поля юзеры делятся на администраторов и обычных юзеров. Но по идее, юзеров регать должен именно администратор.
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)?
Поскольку этот форум малёха баганный, и я немогу исправить свой предыдущий пост, то напишу здесь: возможно это связано с тем, что согласно документации "Если пользователь будет найден, хешированный пароль, сохранённый в базе данных, будет сравниваться с хешированным значением password", но у меня пароли пока не хешированы. Судя по всему оно хеширует вводимый пароль, а потом ищет его в бд, но там пока что не хешированые поли. Видимо отсюда и проблема. Вот правда с хешированием я ещё пока не разобрался.
Тут проблема не в подключении, ты вызываешь метод через фасад БД, а не \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. Где искать проблему?
возникла ошибка:
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;Что я забыл подключить? Просто вроде как подключил всё как в примере.
Какие дополнительные сессии?, уже всё реализовано
В методе где делаешь ручную аутентификацию используешь метод attempt
\Auth::attempt([
'email' => $request->get('email'),
'password' => $request->get('password')
]) - если авторизация через имейл, если вдруг по другому - то указываешь другое поле вместо emailИ потом используешь фасад \Auth с нужными методами:
\Auth::user() - получить пользователя (модель)
\Auth::check() - проверка что аутентифицирован пользователь
\Auth::id() - получить id пользователя
и т.д.
спасибо. Примерно так и представлял.
какие проблемы с прочтением и пониманием ?
Я знаю что есть документация. И всю прочитал уже несколько раз и тщательно ознакомился. Допустим: нужно ли использовать сессии для авторизации, если пользоваться стандартными инструментами авторизации?
Зачем заного изобритать велосипед? Авторизация и регистрация доступны из коробки
Я и пытаюсь пользоваться этой авторизацией, но всё равно непонятно как работать с переменными.
Пишу ручками простую аутентификацию, используя присутствующие в Laravel инструменты.
Кто может помочь объяснить, что следует делать после того, как сверил существует ли данынй пользователь в бд и совпадает ли его пароль. Смотрел на эту статью но так и не понял, как правильно объявить юзера залогиненым и как сделать так, что бы до логаута он везде числился авторизованным. Просто ход мыслей подскажите хотя бы, а я уже как-то додумаю.
Я дурачёк: всё решилось с помощью
return redirect()->intended('dashboard');Только познаю азы Laravel. Как сделать так, что бы в адресной строке адрес был идентичен файлу, который отвечает за данную страницу.
Работал со стандартным методом аутентификации. Но после проверки совпадает ли данный существующий юзер с паролем, оказываясь на нужной странице, в адресной строке по прежнему находится `auth/login`.
Роуты:
Route::get('/dashboard', ['uses' => 'HomeController@dashboard', 'as' => 'dashboard']);
Route::get('auth/login/', 'Auth\AuthController@getLogin');
Route::post('auth/login/', 'Auth\AuthController@postLogin');
Route::get('auth/logout', 'Auth\AuthController@getLogout'); HomeController:
public function dashboard()
{
return view('pages.dashboard');
} AuthController:
protected function postLogin()
{
$email = Input::get('email');
$pass = Input::get('password');
if ($email && $pass)
{
$user = AuthModel::where('email', $email)->where('password', $pass)->get();
if (count($user) == 1)
{
return view('pages.dashboard');
}
}
} То есть после успешного логина отображается страница `dashboard`, но в адресной строке находится `auth/login`. Как сделать что бы в адресной строке было `dashboard`?