1

基本的に、ユーザーがメールアドレスとパスワードを使用してログインできるようにしたいのですが、Users テーブルの主キーとして自動インクリメント ID を使用します。

一部のチュートリアルは、これが非常に簡単であることを示しているようです。しかし、それは私にはうまくいかないようです。まず、認証識別子として「メール」を使用するように User モデルを変更する必要がありました。これは機能しますが、セッションは保存されません (以下を参照)。

ユーザー テーブル移行ファイル。

Schema::create("users", function ($table) {
  $table->increments("id");
  $table->string("email", 255)->unique();
  $table->string("password", 60);
  $table->timestamps();
});

ユーザー モデル ファイル。

use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;

class User extends Eloquent implements UserInterface, RemindableInterface {
  protected $table = 'users';
  protected $hidden = array('password');

  public function getAuthIdentifier() {
    return $this->email;
  }

  public function getAuthPassword() {
    return $this->password;
  }

  public function getReminderEmail() {
    return $this->email;
  }
}

でログインします。

Auth::attempt(array("email" => Input::get("email"), "password" => Input::get("password")), true);

...動作します(trueを返すように)。ただし、セッションは正しく保存されません。後続の要求は認証されません。さまざまなセッション ドライバーを試しましたが、成功しませんでした。

私が追加する場合;

protected $primaryKey = "email";

User モデルに対して、セッションは機能します。「 email」はそのテーブルの主キーではなく、「id」はそうです(そして、「id」を主キーとして保持したいと思います)。


また公式ドキュメントでは、ここでは「email」が使用されているため、「email」を識別列として使用するために特別なことする必要はないと示されているようですが、ここでは数値 ID が使用されています。ここで明らかな何かが欠けていますか?

4

1 に答える 1

1

私はこれを解決するために昨日のすべてを費やしましたが、今日は基本的に User モデルを元の状態に戻しました。

public function getAuthIdentifier() {
  return $this->getKey();
}

...そしてそれは機能しています(メール/パスワードでログインでき、セッションはログインしたままです)。

なぜこれが昨日うまくいかなかったのかわかりません。セッションハッシュが作成される方法と関係がありますか? 何も思いつきません。

于 2013-07-16T10:15:53.270 に答える