Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Вывожу специальные сообщения на страницу.
return redirect()->back()->with('warningMessages', 'Логин и/или пароль не верны!');
Попробовал через
Auth::loginUsingId(1);
авторизоваться - вышло. Так что, как мне кажется, дело в AUth::attempt или в модели.
Через регистрацию пользователя добавил, но авторизация так же не проходит(
dima9595 пишет:covobo пишет:Ты в базу то надеюсь не вручную пользователя добавил? Ибо пароль хэшируется, и в недрах ларки он сравнивает хэши.
vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php:126 (метод validateCredentials)Лол, а что, сейчас уже так не работает? Да, вручную добавлял, но думал что если пароль захэшировать, то всё будет ок) Спасибо, завтра проверю)
Если ты его "нормально" (через Illuminate\Hashing\BcryptHasher по дефолту) захэшировал - то должно работать.
Видос на тему - https://laracasts.com/series/laravel-5- … pisodes/13
Хэшировал через encrypt. Позже попробую создать нового пользователя через регистрацию)
Ты в базу то надеюсь не вручную пользователя добавил? Ибо пароль хэшируется, и в недрах ларки он сравнивает хэши.
vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php:126 (метод validateCredentials)
Лол, а что, сейчас уже так не работает? Да, вручную добавлял, но думал что если пароль захэшировать, то всё будет ок) Спасибо, завтра проверю)
Решил с нуля всё сделать, но эффект такой же, что сильно меня печалит, ибо на самом лёгком я запоролся. Код очень простой, но всё же авторизация не проходит. В БД всё норм. Т.к. простой запрос через Eloquent ORM проходит.
Контроллер:
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class LoginController extends Controller{
use AuthenticatesUsers;
protected $redirectTo = '/';
public function __construct(){
$this->middleware('guest')->except('logout');
}
public function getAuthLogin(){
return view('Auth.getAuthLogin');
}
public function postAuthLogin(Request $request){
$this->validate($request, [
'login_users' => 'required',
'password' => 'required',
]);
if(Auth::attempt( ['login_users' => $request->login_users, 'password' => $request->password] )){
return redirect()->route('home')->with('successMessages', 'Вы успешно авторизовались!');
}else{
return redirect()->back()->with('warningMessages', 'Логин и/или пароль не верны!');
}
}
}
Модель:
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable{
use Notifiable;
protected $table = 'users';
protected $primaryKey = 'id_users';
protected $fillable = [
'login_users', 'mail_users', 'password',
];
protected $hidden = [
'password', 'remember_token',
];
}
Route:
Route::group(['middleware' => 'guest'], function(){
// Route::get('/', ['as' => 'welcome', 'uses' => 'HomeController@getWelcome']);
Route::group(['prefix' => 'auth'], function(){
Route::get('login', ['as' => 'Auth.getLogin', 'uses' => 'Auth\LoginController@getAuthLogin']);
Route::post('login', ['as' => 'Auth.postLogin', 'uses' => 'Auth\LoginController@postAuthLogin']);
});
});
В чём же проблема?
Возможно ты не переопределил метод username() в LoginController и проверка происходит по стандартному полю email вместо login_users , как у тебя .
А где это можно переопределить?
Да и вроде хватит того, что написал в Auth::attempt()
Целый год из-за армии не писал код. Решил вернуться в коддинг и установил новый Laravel 5 (последняя версия). Написал простой код авторизации, а авторизация не проходит. В чём дело?
Controller:
public function postAuthLogin(Request $request){
$data = $request->all(); // Все данные
$rules = [
'login_users' => 'required',
'password' => 'required'
];
$validator = Validator::make($data, $rules);
if(!$validator->fails()){
if(Auth::attempt(['login_users' => $data['login_users'], 'password' => $data['password']], $request->remember) ){
return redirect()->route('home')->with('successMessages', 'Вы успешно авторизовались!');
}else{
// Выполняется этот код!!!
return redirect()->back()->with('warningMessages', 'Логин и/или пароль не верны!');
}
}else{
return redirect()->back()->with('errors', $validator->messages());
}
}
Model User (врятли что-то даст)
class User extends Authenticatable{
use Notifiable;
protected $primaryKey = 'id_users';
protected $fillable = [
'login_users', 'mail_users', 'password',
];
protected $hidden = [
'password', 'remember_token',
];
}
Если что-то нужно будет, скину...Заранее спасибо!
В папку public. А дальше структуру сами придумывайте.
Уже решено! Как я понял, проблема была в User.php. Там по стандарту остались не заменены входящие данные, с которыми в таблице не были одинаковыми.
Сейчас не использую middleware => web. По идеи сессия записывается, а вот на следующей странице не отображается. В storage/framework/session всё записывается.
UP, всё ни как не сделал(
Файл httpd.conf лежит в директории /home/admin/conf/web. но через sftp он не пускает,на права ругается. Через ssh с помощью sudo,я попал в эту директорию. Но как мне теперь открыть этот файл?
Советую использовать mc (sudo apt-get install mc). Хороший файловый менеджер для Linux (пробовал на Ubuntu, хз как у вас). А дальше там легко разобраться как открыть.
И ещё один вопрос: У меня база не стандартная, т.е. вместа username => login_users, email => mail_users. Как и где мне поменять, что бы авторизация проходила?
И кстати, у меня всё равно авторизация не срабатывает.
Из дампа сессии:
array:5 [▼
"_token" => "UTfy9Q9gslW9vfgKZ1bkNyOdQYAfmCeWh8YoaNFq"
"url" => array:1 [▶]
"_previous" => array:1 [▶]
"flash" => array:2 [▶]
"login_web_59ba36addc2b2f9401580f014c7f58ea4e30989d" => null
]
dima9595 пишет:И как сделать так, что бы не было обязательной авторизации?
Можно просто роуты авторизации убрать,и авторизации не будит.
UPD: а как тогда в дашбоард попадать собираетесь без авторизации?))
Я имел ввиду, что бы сразу не редиректило на авторизацию. А то только после авторизации появляется сайт.
И как сделать так, что бы не было обязательной авторизации?
TrueKanonir, а это обязательно? Может и так как нить оставить можно?
Пряморукое решение есть - просто настроить Apache так, как вам нужно. Все эти директории (www, html и т.п.) настраиваются в конфиге. Так что смело изучайте конфиг и документацию.
А у меня не работает, ни с middleware, ни без него? Что делать?
Route::get('/', ['as' => 'index', 'uses' => 'HomeController@index']);
Route::group(['prefix' => 'auth'], function(){
Route::get('login', ['as' => 'auth.login.get', 'uses' => 'Auth\AuthController@getLogin']);
Route::post('login', ['as' => 'auth.login.post', 'uses' => 'Auth\AuthController@postLogin']);
});
Написал даже так - не работает.
Route::group(['middleware' => 'web'], function(){
Route::get('/', ['as' => 'index', 'uses' => 'HomeController@index']);
Route::group(['prefix' => 'auth'], function(){
Route::get('login', ['as' => 'auth.getLogin', 'uses' => 'Auth\AuthController@getLogin']);
Route::post('login', ['as' => 'auth.postLogin', 'uses' => 'Auth\AuthController@postLogin']);
Route::get('register', ['as' => 'auth.getRegister', 'uses' => 'Auth\AuthController@getRegister']);
});
});
Всё равно ни чего не пашет. Хотя только усугубил ситуацию. Раньше, через сессии выводились сообщения, мол пользователь авторизован, а сейчас их нет.
Не думал что с таким столкнусь, раньше как то это решил, но вот только не помню как( Чёртов Angular, весь мозг сожрал(((
Написал простую авторизацию, по идеи, всё работает - отдаёт данные авторизованного пользователя (через dd(Auth::user())), а вот после обновлении страницы пропадает, как будто даже не авторизован(
Читал на Тостере, мол дело в сессиях и нужно использовать middleware web, но я их использую, а толку нет.
Route:
Route::get('/', ['as' => 'index', 'uses' => 'HomeController@index']);
Route::group(['middleware' => 'web', 'prefix' => 'auth'], function(){
Route::get('login', ['as' => 'auth.getLogin', 'uses' => 'Auth\AuthController@getLogin']);
Route::post('login', ['as' => 'auth.postLogin', 'uses' => 'Auth\AuthController@postLogin']);
Route::get('register', ['as' => 'auth.getRegister', 'uses' => 'Auth\AuthController@getRegister']);
});
Если ещё какие-то данные нужны, то выложу. Просто думаю что дело в роутах. Но как решить - хз(
Заранее благодарю за помощь.
PS: Работаю на локалке. Ошибок ни каких не выводит.
Всё, решено)
Пробовал и с validatorLogin (на форуме не опубликовал, т.к. потом попытался так сделать) - не работало. А сейчас всё ок)
Порты открыты? На домен прикручена запись для почты?
Но лучше все переделать и валидацию в Request писать
Т.е. старым, дедовским способом?
Validate::make?
Я пробовал создавать:
protected function validatorLogin(array $data){
return Validator::make($data, [
'login_users' => 'required',
'password' => 'required',
]);
}
но каким-то магическим способом эта фигня не считывалась, хоть в авторизации я явно указывал её...
$v = $this->validatorLogin($data);
А как тогда сделать для авторизации?
С на своём сайте вы поддерживаете https?