14

既存のユーザーベースがあり、確認メールを追加しています。確認はオプションですが、追加機能が許可されます。ユーザーは確認する必要はありません。確認可能なモジュールを追加し、移行を実行しました。確認は宣伝どおりに機能します。

ただし、ユーザーは認証されていないため、ログインできません。現在のすべてのユーザーの確認値はゼロです。これは私たちが望んでいることです (ユーザーはいつでも戻ってメールを確認できます)。すべての Devise wiki 記事に従い、初期化子で allow_unconfirmed_access_for を設定しました。

config.allow_unconfirmed_access_for = 10.years 

ユーザーモデルでも設定してみました:

devise :confirmable, allow_unconfirmed_access_for: 10.years

他の値 (1.year、500.days など) も使用してみました。

私のSessionsController、Deviseの方法と大差ありません(こちらgithubにあります

class Users::SessionsController < Devise::SessionsController
  respond_to :json

  def new
    redirect_to "/#login"
  end

  def create
    resource = warden.authenticate(auth_options)
    if !resource
      render json: {error: "Invalid email or password" }, status: 401 and return
    end

    sign_in(resource_name, resource)
    render "sign_in", formats: [:json], locals: { object: resource }
  end
end

工夫の応答:

{"エラー":"続行する前に、アカウントを確認する必要があります。"}

Rails 3.2.9 で 2.1.2 を考案します。

4

3 に答える 3

21

Devise チームは、 allow_unconfirmed_access_forの有効な値として nil (制限なし) をサポートするバージョン (2.2.4) をリリースしました。問題: https://github.com/plataformatec/devise/issues/2275

次のことができるようになりました。

config.allow_unconfirmed_access_for = nil 
于 2013-05-08T11:39:03.673 に答える
18

allow_unconfirmed_access_for を使用する代わりに、User モデルでこれを行う必要がありました。

  protected
    def confirmation_required?
      false
    end
于 2013-01-17T17:57:01.863 に答える
0

同じ問題があります。デバイスの確認をオンにした後、以前に作成したアカウントにログインできません。

その理由は次のとおりです。

def confirmation_period_valid?
  self.class.allow_unconfirmed_access_for.nil? || (confirmation_sent_at && confirmation_sent_at.utc >= self.class.allow_unconfirmed_access_for.ago)
end

古いアカウントでは、confirmation_sent_at が nil に設定されているため、ログインできません。

1 つの解決策は、confirmation_sent_at を次のように強制することです。

update users set confirmation_sent_at=created_at where confirmation_sent_at is NULL;

手動で行うか、移行を作成できます。

于 2016-02-05T10:19:32.337 に答える