Я хочу обновить имя пользователя или адрес электронной почты в laravel - PullRequest
0 голосов
/ 10 мая 2018

Я обновил laravel по умолчанию make: Auth для входа в систему с именем пользователя и электронной почтой. Я просто переопределил функцию имени пользователя в

loginController.php to:

public function username()
    {
        $loginType = request()->input('username');
        $this->username = filter_var($loginType , FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
        request()->merge([$this->username => $loginType]);
        $this->property_exists($this, 'username') ? $this->username : 'email';
    }

но получил ошибку:

Method [property_exists] does not exist on [App\Http\Controllers\Auth\LoginController].

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

property_exists - проверяет, есть ли у объекта или класса свойство

bool property_exists (смешанный $ class, string $ property)

public function username()
{
    $loginType = request()->input('username');
    $this->username = filter_var($loginType , FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
    request()->merge([$this->username => $loginType]);
    property_exists($this, 'username') ? $this->username : 'email';
}
0 голосов
/ 10 мая 2018

Метод username() в LoginController ссылается на имя пользователя имя поля , отправленное по запросу.В вашем случае я бы предположил, что имя поля такое же, но что меняется, так это то, используете ли вы это поле, чтобы найти адрес электронной почты или имя пользователя.В этом случае у вас должна быть возможность «обмануть» провайдера пользователя, чтобы сделать это, переопределив метод credentials в вашем LoginController (и не переопределяя функцию username):

protected function credentials(Request $request)
{
    $v = \Validator::make($request->only($this->username()), [
         $this->username() => "email"
    ]);
    if ($v->passes()) {
        return [
           "email" => $request->input($this->username()),
           "password" => $request->input("password") 
       ]; 
    } else {
       return [
           "username" => $request->input($this->username()),
           "password" => $request->input("password") 
       ]; 
    }
}

Thisбудет передано провайдеру пользователя, который выберет пользователя либо по столбцу email, либо по столбцу username в зависимости от того, что передано.

0 голосов
/ 10 мая 2018

property_exists - это функция php, а не метод какого-то класса. Итак, чтобы исправить эту ошибку, просто перепишите ваш код:

public function username()
{
    $loginType = request()->input('username');
    $this->username = filter_var($loginType , FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
    request()->merge([$this->username => $loginType]);
    property_exists($this, 'username') ? $this->username : 'email';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...