User Tabelle in Laravel

hmmmm

New Member
Ich schreibe ein kleines Laravel-Programm das in eine viel grössere bestehende Applikation eingebunden wird. Dieses Legacy-Programm hat natürlich schon eine User-Tabelle, deswegen hab ich den Namen der Tabelle und den Primary Key in User.app geändert:

PHP:
class User extends Model implements AuthenticatableContract, CanResetPasswordContract {
    use Authenticatable, CanResetPassword;

    // The database table used by the model
    protected $table = 'my_user_table';
    protected $primaryKey = 'user_id';
}

Funktioniert!

Was aber nicht funktioniert ist, einen anderen Namen für das Email-Feld zu benutzen.

Ich hab sogar geschafft mich zu registrieren, die Daten in der Datenbank schauen ok aus aber wenn ich mich dann später erneut einloggen will klappt es nicht weil Laravel folgende Query macht:

Code:
'WHERE email=xxx@xxx.com'

und mein Emailfeld ja einen anderen Namen hat!
 
Zuletzt bearbeitet:

Stormy

New Member
Der Default authentication controller geht fix von diesem Spaltennamen aus. Die Datenbanklassen (Eloquent) sind da schon etwas weiter :) Aber man kann natürlich auch sagen, dass diese Default-Klassen einfach nur als Beispiele anzusehen sind :D

Um völlig andere Datenbankstrukturen für Registrierung/Login nutzen zu können musst Du die Default-Controller und Traits neu schreiben:
  • App\User - fillable und hidden Variablen anpassen
  • Entfern "use Authenticatable, CanResetPassword;" weil keiner dieser Illuminate-Traits kann mit anderen Spaltennamen umgehen
  • Mach eine eigene Implementierung von Illuminate\Contracts\Auth\Authenticatable und Illuminate\Contracts\Auth\CanResetPassword
  • App\Http\Controllers\Auth\AuthController benutzt den Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers trait, auch der ist nicht kompatibel mit anderen Spaltennamen (schau Dir postLogin() mal an!).
  • App\Http\Controllers\Auth\PasswordController benutzt den Illuminate\Foundation\Auth\ResetsPasswords trait, auch der ist inkompatibel
 
Oben