Смена пользователя в 1 клик
Смена пользователя в 1 клик
Доброго времени суток.
Такая проблема :
Есть список пользователей, например Users
Надо в списке напротив каждого юзера сделать иконку, при клике на которую мы выходим из своей учетки и входим в его.
Вопрос в том, как можно передать при клике логин юзера и его пароль, залогиниться и войти в систему ?
Такая проблема :
Есть список пользователей, например Users
Надо в списке напротив каждого юзера сделать иконку, при клике на которую мы выходим из своей учетки и входим в его.
Вопрос в том, как можно передать при клике логин юзера и его пароль, залогиниться и войти в систему ?
- nizsheanez
- Сообщения: 814
- Зарегистрирован: 2011.04.29, 13:09
- Откуда: Москва
Re: Смена пользователя в 1 клик
а тупо гет параметрами не подойдет?
/loginAsUser/login/alex/
ну и проверку в контроллер loginAsUser воткнуть на то что вы из под админа заходите и еще нагенерить уникальную куку по которой будет доступ из одной учетки в другую скакать.
/loginAsUser/login/alex/
ну и проверку в контроллер loginAsUser воткнуть на то что вы из под админа заходите и еще нагенерить уникальную куку по которой будет доступ из одной учетки в другую скакать.
Re: Смена пользователя в 1 клик
т.е. по ссылке я передаю из ссылки гетом логин и пас, в контроллере loginAsUser я проверяю права + кука, но есть у нас еще loginForm, как же там мне автоматически заполнить поля и "войти" ?
(я новичок в этом деле:))
(я новичок в этом деле:))
Re: Смена пользователя в 1 клик
по ссылке логин пасс не секурно. если конечно не https
Re: Смена пользователя в 1 клик
Все секурно, все одобреноRusAlex писал(а):по ссылке логин пасс не секурно. если конечно не https
Re: Смена пользователя в 1 клик
В твоем случае надо забыть про LoginForm.myselfdsk писал(а):т.е. по ссылке я передаю из ссылки гетом логин и пас, в контроллере loginAsUser я проверяю права + кука, но есть у нас еще loginForm, как же там мне автоматически заполнить поля и "войти" ?
(я новичок в этом деле:))
Я бы сделал так:
Код: Выделить всё
public function loginAsUser()
{
//1) проверка, а может ли текущий ющер логиниться по чужим логином
Yii::app()->user->logout();//разлогиниваем текущего юзера
$identity=new UserIdentity(LOGIN,PASS);// где LOGIN,PASS это от того юзера под которым хотим логиниться
$identity->authenticate();
switch($identity->errorCode)
{
case User::ERROR_NONE://ошибок нет
$duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
Yii::app()->user->login($identity,$duration);//логинимся под юзером
break;
}
}
Re: Смена пользователя в 1 клик
а сама передача данных (логин, пасс) в таком случае в виде ссылки как осуществляется?kosenka писал(а): В твоем случае надо забыть про LoginForm.
Я бы сделал так:Код: Выделить всё
$identity=new UserIdentity(LOGIN,PASS);// где LOGIN,PASS это от того юзера под которым хотим логиниться
Re: Смена пользователя в 1 клик
А можно просто передавать ID юзера, под которым логинится, например, _http://site.ru/loginAsUser/?id=123&hash=QWEASDZXC
В loginAsUser проверяем по базе, а есть ли такой ID и если есть, то логинимся под ним.
Ну можно еще передать какой-нибудь "хэш с солью", чтобы точно быть уверенным, что это "мы" логинимся.
В loginAsUser проверяем по базе, а есть ли такой ID и если есть, то логинимся под ним.
Ну можно еще передать какой-нибудь "хэш с солью", чтобы точно быть уверенным, что это "мы" логинимся.
Re: Смена пользователя в 1 клик
вот через аткую ссылку мне приходит id
а вот такая функция в контроллере :
Проблема в том, что на стороку
$identity=new UserIdentity($aid-> login,$aid-> passwd);
он ругается
Код: Выделить всё
'loginAsUser' => array(
'label' => 'Вход',
'url' => "CHtml::normalizeUrl(array('loginAsUser', 'aid'=>\$data->userid))",
)
Код: Выделить всё
public function actionloginAsUser()
{
if (!Yii::app()->user->checkAccess('operator')){
if (Yii::app()->user->isGuest) $this->redirect(array('site/login'));
else $this->redirect(array('site/index'));
}
if(isset($_GET['aid']))
{
$aid = $_GET['aid'];
$user = Users::model()->findByAttributes(array('userid'=>$aid));
Yii::app()->user->logout();
$identity=new UserIdentity($aid-> login,$aid-> passwd);
$identity->authenticate();
Yii::app()->user->login($identity);
}
}
$identity=new UserIdentity($aid-> login,$aid-> passwd);
он ругается
Не могу разобраться в чем проблемаTrying to get property of non-object
- nizsheanez
- Сообщения: 814
- Зарегистрирован: 2011.04.29, 13:09
- Откуда: Москва
Re: Смена пользователя в 1 клик
$aid не объект, а null скорее всего. ищи где его получаешь и смотри почему тебе приходит null
Re: Смена пользователя в 1 клик
Как я понимаю, $_GET в отличие от $_POST , передает лишь один атрибут, когда Пост осуществляет массовое присваивание.
можно ли передавая в GET лишь userid, после добавить в объект дополнительные атрибуты, такие как login и passwd? И при этом найти их в базе по userid и вписать каждое в соответсвующий атрибут?
можно ли передавая в GET лишь userid, после добавить в объект дополнительные атрибуты, такие как login и passwd? И при этом найти их в базе по userid и вписать каждое в соответсвующий атрибут?
Re: Смена пользователя в 1 клик
Как можно сделать возможным логиниться не по паре(логин,пароль) а по userid ?
Re: Смена пользователя в 1 клик
myselfdsk писал(а): Проблема в том, что на стороку
$identity=new UserIdentity($aid-> login,$aid-> passwd);
он ругаетсяНе могу разобраться в чем проблемаTrying to get property of non-object
Код: Выделить всё
$identity=new UserIdentity($user->login,$user->passwd);
- lancecoder
- Сообщения: 2532
- Зарегистрирован: 2012.06.26, 17:16
Re: Смена пользователя в 1 клик
Код: Выделить всё
if (!Yii::app()->user->checkAccess('operator')){
if (Yii::app()->user->isGuest) $this->redirect(array('site/login'));
else $this->redirect(array('site/index'));
}
Re: Смена пользователя в 1 клик
Как раз это и написал, прежде чем увидел это сообщениеRyadnov писал(а):Код: Выделить всё
$identity=new UserIdentity($user->login,$user->passwd);
Почему? По моему все неплохо.lancecoder писал(а):нехорошее условиеКод: Выделить всё
if (!Yii::app()->user->checkAccess('operator')){ if (Yii::app()->user->isGuest) $this->redirect(array('site/login')); else $this->redirect(array('site/index')); }
С сменой польователя я разобрался, но теперь другая беда :
Нужно всетаки вести лог всех изменений всех полей, таки чтобы можно было отслеживать ту личность, которая изменила определенную инфу.
Идея в том, что при вызове смены пользователя срабатывал механизм логирования, который бы записывал, кто, у кого и какую инфу поменял, чтобы не возникло никаких проблем с необоснованными обвинениями
- lancecoder
- Сообщения: 2532
- Зарегистрирован: 2012.06.26, 17:16
Re: Смена пользователя в 1 клик
checkAccess трудозатратнее, лучше сразу отсеивать сначала гостей, на один запрос как никак меньше будет, если CDbAuthManager. А вообще лучше стремиться к белому списку, а остальных к черному... имхоПочему? По моему все неплохо.
запрети менять инфу, через сценарий или форму модели (unsafe attribute)ту личность, которая изменила определенную инфу.
Re: Смена пользователя в 1 клик
В том то и соль, что возможность изменять инфу надо, как к примеру делаются на сайтах приемных комиссий, где операторы самостоятельно могут менять инфуlancecoder писал(а): запрети менять инфу, через сценарий или форму модели (unsafe attribute)
Re: Смена пользователя в 1 клик
В общем код выглядит так :
Хотелось бы где-нибудь хранить значение (userid) того, кто таки зашел под вами. И использовать этот id после
Может кто подскажет чего?
Код: Выделить всё
public function actionloginAsUser()
{
if (!Yii::app()->user->checkAccess('operatorplace')){
if (Yii::app()->user->isGuest) $this->redirect(array('site/login'));
else $this->redirect(array('site/index'));
}
if (isset($_GET['aid'])) {;
$aid = $_GET['aid'];
$user = Users::model()->find('userid=:userid',array(':userid'=>$aid));
$identity = new UserIdentity($user->login, $user->passwd);
$identity->errorCode=0;
Yii::app()->user->login($identity);
$this->redirect(array('site/index'));
}
}
Может кто подскажет чего?
Re: Смена пользователя в 1 клик
Всем спасибо за помощь