2017-06-26 4 views
0

はのスキーマがあるとしましょう:ユーザーがキーをリセットしたいときEctoスキーマの値を期限切れにする方法は?

schema "players" do 
    :key, :string 
    :reset_key_token, :string 
end 

ハッシュが:reset_key_tokenフィールドに設定されています。考え方は、:reset_key_tokennilに戻す必要があり、1週間後にトークンが設定されているということです。私の質問は:

Ectoスキーマの価値を期限切れにする標準的な方法はありますか?

私はしばらく時間を探していましたが、まだ対象に何も見つかりませんでした。しかし、私はthis MySQL questionを見つけ、同じアイデアに従うと思った。

1.- :reset_key_token_expires, Ecto.DateTimeをスキーマに追加する。

2.-私の場合は書き込みの前にそれを必要としますが、:reset_key_token_expiresをチェックし、時間が経過すればnilに設定してください。

しかし、これまでにこれを行った人が何か答えを出すことができるかどうかを確認したいと思います。

ありがとうございました!

+1

方法は、いいですね。 – Dogbert

答えて

1

実際にが必要ですか?に値を設定するには、期限が切れてからが必要ですか?このユースケースでは、期限切れの後にトークンが使用されないようにするために、キーのリセットを処理するコントローラの現在の時刻と値を比較しています。ここではいくつかのコードがあります:私は値を満了したが、 `reset_key_token_expires`が現在時刻よりも大きい場合、コントローラは、エラーを表示させるにリセットしないと思います以外

def reset_key(conn, %{"username" => username, "reset_key_token" => reset_key_token}) do 
    user = Repo.get_by!(User, username: username) 
    if reset_key_token == user.reset_key_token do 
    case DateTime.compare(user.reset_key_token_expires, DateTime.utc_now) do 
     :gt -> 
     # token is still valid 
     _ -> 
     # token is expired 
    end 
    else 
    # token is invalid 
    end 
end 
+0

良いオプションのような音です、ありがとう! –

関連する問題