2015-08-30 6 views
1

У меня есть два способа регистрации на моем сайте: адрес электронной почты или facebook.Проверьте, есть ли у пользователя пароль в laravel

На имя пользователя facebook у пользователя нет пароля. Который мне нужно прочитать в некоторых случаях, чтобы узнать, будет ли пользователь вводить пароль для изменения своей электронной почты, например

Я хочу, возвращая объект пользователя в laravel, также вернуть свойство has_pass, которое будет содержать это значение .. Вместо создания нового поля базы данных, я просто подумал, что с помощью функции в модели пользователя, чтобы определить, является ли пароль пустым, например:

public function hasPass(){ 
    if($this->password){ 
     return true; 
    } 
    return false; 
} 

Это хорошо работает, но я хочу, данные для возврата с пользовательским объектом, поэтому я могу просто проверить свойство $ user-> haspass, вместо того, чтобы вызывать функцию hasPass() при каждой проверке. Итак, как я могу это сделать, и это хороший способ сделать это?

+0

'public function hasPass() { if ($ this-> password) { return $ this; } null null; } 'а затем' $ user = Auth :: user() -> hasPass(); 'then' if ($ user! == null) ' – MozzieMD

+0

@ raphadko.i также сталкивается с проблемой в socialite.how вы аутентифицируете facebook user.i означает, что laravel auth требует адрес электронной почты и пароль, но в facebook мы получаем только электронную почту. – vision

ответ

2

Использование an accessor для get_password:

class User extends Eloquent 
{ 
    protected $appends = ['has_password']; 

    public function getHasPasswwordAttribute() 
    { 
     return ! empty($this->attributes['password']); 
    } 
} 

Добавление его к $appends собственности автоматически добавит has_password в массив, если модель имеет серийный номер.

+0

Я не понимаю '$ appends'. Означает ли это, что аксессор будет добавлен к атрибутам модели? – user2094178

+0

Да. Он будет добавлен к остальным атрибутам модели, когда модель будет сериализована. –

+0

Хорошо, если сказать, что если я не использую '$ appends', аксессор будет доступен * только * в объекте или коллекции. Это верно? – user2094178

Смежные вопросы