最初の起動時に、サーバー バックエンドで 2 つの異なる API エンドポイントを呼び出すこのアプリがあります (両方とも目的が大きく異なります)。ただし、どちらの 2 つの方法にも、ヘッダーで渡された情報 (デバイス識別子 + API キー)before_filter
を使用して呼び出しを認証する があります。HTTP_AUTH
指定された識別子を持つデバイス テーブルから行が見つからない場合、その識別子を持つ新しい行が自動的に作成されます。私の問題は、2 つの呼び出しが非常に同時であるため、両方の要求がレコードを見つけられず、両方が新しいデバイス行を作成することがあるようです (その結果、同じデバイス識別子を持つ行が重複します)。
私の認証方法は次のようになります。
def current_user
authenticate_with_http_basic do |udid, secret|
if secret == APP_SECRET
@device = Device.find_by_udid(udid)
if !@device
@device = Device.new
@device.udid = udid
@device.created_on = DateTime.now.utc
end
// set a bunch of properties on @device
@device.connected_at = DateTime.now.utc
@device.save
end
end
end