Argument 1 übergeben SessionGuard::login() muss eine Instanz von Auth\Authenticatable in Laravel 5.2
Bin ich mit Laravel 5.2.
Ich fügte hinzu, ein neues Feld zu den users
Tabelle namens username
und ich habe es in der Ansicht und AuthController.php
Ich bin auch dabei einen zu prüfen, ob der Benutzer zum verwenden eines reservierten slug für seinen Benutzernamen, wenn ja, werfe ich einen Fehler, wenn der username ist gut, ich Speichere in der Datenbank.
Checke ich gegen 2 reserviert Schnecken banner
und image
- das ist alles, was ich reserviert habe.
Wenn ich das Häkchen entfernen, werden die Daten in der Datenbank gespeichert, normalerweise, einschließlich der reservierten Schnecken. Also ich muss das überprüfen.
Jedoch, wenn ich das überprüfen, ich bekomme diese Fehlermeldung
ErrorException in SessionGuard.php Linie 439:
Argument 1 übergeben zu Beleuchten\Auth\SessionGuard::login() muss eine Instanz von Illuminate\Verträge\Auth\Authenticatable, string, gegeben, genannt, C:\xampp\htdocs\socialnet\vendor\laravel\framework\src\Illuminate\Foundation\Auth\RegistersUsers.php auf Zeile 63 und definiert
Dies ist mein code in AuthController
nachdem ich modifiziert habe
protected function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|min:6|confirmed',
'username' => 'required|alpha_num|unique:users,username',
]);
}
protected function create(array $data)
{
$check = $this->slugCheck($data['username']);
if($check['status'] == 'nok') {
return 'this username is a reserved name';
} else {
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
'username' => $data['username'],
]);
}
}
public function slugCheck($slug){
$slug = strtolower($slug);
//is the slug in the banned words list
//
if(array_search($slug, array('','banner','image'))){
return array('status' => 'nok', 'message' => 'This slug is on a list of reserved names');
}
$user = User::where('username', '=', $slug)->first();
if($user){
return array('status' => 'nok', 'message' => 'This slug is already taken');
} else {
return array('status' => 'ok', 'message' => 'Slug is unique');
}
}
Wenn ich dd($check)
nach dem deklarieren der $check
variable und wählen Sie einen reservierten Namen, bekomme ich die korrekte Antwort.
array:2 [▼
"status" => "nok"
"message" => "This slug is on a list of reserved names"
]
- stellen Sie sicher, dass Sie Hinzugefügt Benutzername User.php $fillable array.
- Was macht Ihr-User-Modell aussieht?
- Es ist bereits da. @manniL es ist ein einfaches Modell mit
$fillable
und$hidden
- dieser Fehler ist straight forward. wenn $check['status'] == 'nok', ist wahr, es wird nicht wieder Instanz der Klasse. stattdessen wird eine Zeichenkette zurückgeben. Sie können dies lösen, indem Sie Ihre check-in einigen middleware
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist, weil Sie die Rückgabe ein string und die Klasse erwartet eine Instanz von Authenticatable.
Bewegen Ihre Validierung in einer middleware ist Ihre option. Erstellen Sie eine middleware, die prüft, ob der Benutzername ist 'Slug' und nur procede create () - Methode auf, wenn Validierung Pässe, ansonsten den string: 'Der Benutzername ist ein reservierter name'
Jetzt können Sie bereinigen die AuthController durch entfernen der slugCheck Methode, und Sie können immer sicher, dass, wenn create () - Methode aufgerufen wurde, der Benutzername ist nicht "Slug".
Können Sie die laravel Dokumentation