簡體   English   中英

我想使用laravel中的用戶名或電子郵件更新登錄名

[英]I want to update login with username or email in laravel

我已經更新了laravel default make:Auth以使用用戶名和電子郵件登錄。 我只是在其中有覆蓋用戶名功能

loginController.php可以:

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].

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';
}

property_exists —檢查對象或類是否具有屬性

bool property_exists(混合$ class,字符串$ 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';
}

LoginController中的username()方法引用請求發送的用戶名字段名稱 在您的情況下,我可以想象該字段名稱是相同的,但是發生的變化是您是否使用該字段查找電子郵件或用戶名。 在這種情況下,您應該能夠通過覆蓋LoginController中的credentials方法來“欺騙”用戶提供者(而不是覆蓋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") 
       ]; 
    }
}

這將被傳遞給用戶提供其要么被選擇用戶email列或由username取決於什么傳遞列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM