Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
В разрабатываемом приложении при успешной аутентификации пользователь попадает в личный кабинет. В личном кабинете он получает возможность оперировать различными сущностями. Для сущностей реализованы операции создания, чтения, редактирования и удаления(CRUD). Определение конкретной сущности, с которой работает пользователь, производится через ее идентификатор. Идентификатор передается следующим образом:
{{ HTML::link_to_route('system_create', 'ADD SYSTEM', $id) }}
или
{{ Form::open('system/delete','Delete') }}
{{ Form::token() }}
{{ Form::hidden('id', $id) }}
{{ Form::submit('Delete') }}
{{ Form::close() }}
Проблема состоит в том что пользователь получает возможность подменить идентификатор и получить доступ к чужим сущностям.
Необходимо ли при каждом запросе пользователя проверять его атрибуты, с запросами в базу? Либо есть другой способ обеспечить безопасность и сохранность данных. Расскажите каким образом вы решаете проблемы подобного рода?
Вы правы, посмотрел исходники laravel\auth\eloquent.php и laravel\auth\fluent.php. Пробовал различные варианты, в конце концов выкинуло ошибку вида undefined stdClass:$id, изменил имя ключевого поля в таблице на id и все заработало. Почему данной ошибки не получил сначала мне не ясно. Спасибо за помощь.
Для поля password установил атрибуты varchar(64), ни к каким изменениям не привело. К слову в приведенном мной коде хэширование пароля не происходит. Также пробовал использовать id для первичного ключа - результат тот же...
В чем может быть ошибка? Сталкивался кто либо с подобными проблемами?
Пользователь не проходит проверку при аутентификации. Вроде все согласно документации, но функция attempt возвращает false.
//application/config/auth.php
'driver' => 'eloquent',
//'driver' => 'fluent',
'username' => 'nick',
'password' => 'password',
'model' => 'User',
'table' => 'users',
//код контроллера
$nick = Input::get('nick');
$password = Input::get('password');
$credentials = array(
'username' => $nick,
'password' => $password
);
if(Auth::attempt($credentials)){
return 'Заработало!';
}else{
return dd($credentials);
}
Дамп таблицы
CREATE TABLE `users` (
`iduser` int(10) NOT NULL AUTO_INCREMENT,
`nick` varchar(10) NOT NULL,
`password` varchar(20) NOT NULL,
`fio` varchar(128) NOT NULL,
`u_id` bigint(20) NOT NULL,
`descr` text NOT NULL,
`ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`iduser`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
Пробовал eloquent и fluent. Имена таблицы и модели указаны верно.
Спасибо за советы.
Пытаюсь создать таблицы с использование класса Schema и связать их через внешний ключ. Подскажите где я ошибся.
Schema::create('users', function($table){
$table->increments('iduser');
$table->string('nick');
$table->string('fio')->unique();
$table->integer('uid')->unsigned();
$table->text('descr');
$table->timestamps();
});
Schema::create('systems', function($table){
$table->increments('idsystem');
$table->integer('uid');
$table->integer('iduser');
$table->text('descr');
$table->timestamps();
$table->foreign('iduser')->references('iduser')->on('users');
});
Message:
SQLSTATE[HY000]: General error: 1005 Can't create table 'laraveltutorial.#sql-f3c_27' (errno: 150)
SQL: ALTER TABLE `systems` ADD CONSTRAINT systems_iduser_foreign FOREIGN KEY (`iduser`) REFERENCES `users` (`iduser`)
Bindings: array (
)