3

デバイスで #registerable をオフにして、コンソールとシード データを介してユーザーを登録しようとしていますが、サインインに問題があります。

  1. コンソールからユーザーを作成しました: User.create!(email: 'example@example.com', password: 'password', username: 'username')
  2. 検証に合格し、データベースに保存されます
  3. メール: user@example.com とパスワード: password を入力しても、このユーザーで (Web サイトのフォームから) サインインできません
  4. ただし、これはコンソールでのパスワードです。

    u = User.find_by_email('example@example.com')
    
    u
     => #<User id: 6, email: "example@example.com", encrypted_password: "$2a$10$xd0PMJ.qDDu6VtFd6i2EM.bQ0h1rvODyzaqFdzo3Uo4C...", username: "user", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: "2013-09-30 01:25:16", updated_at: "2013-09-30 01:25:16">
    
    
    u.valid_password? 'password'
     => true
    

複数のユーザーを試し、db/seed.rb で作成してみました。繰り返しますが、データベースに入り、すべてが正常に見えます。サインインしないだけです。また、一致するパスワードを使用して password_confirmation フィールドを追加しようとしましたが、サイコロはありません。

ユーザー モデルで :registerable をオンにし、サインアップ ページに移動してユーザーをサインアップすると、そのユーザー (フォームから作成) でログインできます。

私の唯一の考えは、暗号化されたパスワードが生成される方法に何らかの違いがあるということですか? しかし、Web で作成されたユーザーに対して同じ find_by_email/valid_password チェックを実行できるため、それは成り立ちません。

どんな助けでも大歓迎ですか?

編集:

私は Confirmable を使用していません。これが私の Devise 属性です。

     devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatablen

Edit2 ウェブで作成したアカウントでログインできなくなりました。さらにデバッグを行う必要があります。

4

2 に答える 2

3

この問題を解決しました。デバイス初期化子で設定ミスをしました。config.authentication_keys 行を読み間違えて、すべてのキーではなくキーのいずれかまたは両方であると考えました。別の人がこれを Google で見つけた場合は、自動生成されたイニシャライザに戻るか、git ロールバックすることをお勧めします。これは、ユーザー作成の違いや、devise の :registrable モジュールの違いとは関係がないと思います。

于 2013-09-30T17:05:25.973 に答える
3

Confirmableを使用していると仮定して、次を使用してユーザーを作成します。

User.create!(email: 'example@example.com', password: 'password', username: 'username', confirmed_at: Time.now)

そうしないと、devise はユーザーがメールアドレスを確認するのを待ちますが、これは決して起こりません。

于 2013-09-30T02:38:56.630 に答える