2016-10-29 2 views
0

Deviseを使用しているアプリケーションがあります。ユーザーがサインアップした後、特定のページに誘導され、このページでAPIが呼び出され、値が保存されます。 APIから、ユーザーが登録フォームを完了して送信をクリックした後にのみ、このページをアクセス可能または利用可能にする必要があります。その後、このページにリダイレクトされます。申し込み後にページを表示する - Ruby on Rails

このページまたはURLは、アクセス後に新しい値を送信するため、サインアップ後に他の方法でアクセスできないようにしたいと考えています。どうすればこれを達成できますか?

彼らはAPIを呼び出すページにリダイレクトされます、ユーザーがサインアップしたら:

def after_sign_up_path_for(resource) 
    api_call_path ##path that can only be accessed after sign_up 
end 

APIが呼び出されると、ページが開かれたら、JSONデータからの応答は自動的にデータベースに保存され、ページが再び開かれると、新しいデータで新しいJSON応答が受信されます。これは避けたいものです。

一言で言えば、私の質問は、特定のパスへのアクセスを制限し、ユーザーがサインアップフォームを完成した場合にのみそのパスにアクセスできるようにする方法です(実行する方法があります)ユーザーモデルを使用してユーザーを作成した後、コールバック/フィルターを使用するコントローラーのコード

+0

多くの要因によって異なりますが、このAPIコールではユーザーからの入力が必要ですか?より具体的な詳細は、あなたが得るより有用な答えを提供することができます。 – max

答えて

1

私はちょっと似ていました。コードを実行するには、ユーザーをページに誘導する必要はありません。ユーザーが最初にログインした後に実行する必要があるコードを実行するだけです。

#config/routes.rb 
devise_for :users, controllers: { sessions: "sessions" } 

#app/controllers/sessions_controller.rb 
class SessionsController < Devise::SessionsController 

    def after_sign_in_path_for(resource) 
    if resource.sign_in_count == 1 
     ##Do something awesome 
    else 
     root_path 
    end 
    end 
end 

エマニュエルは、あなたがDevise Controllers上の情報を確認することができますfuther助言通り:

あなたがセッションコントローラを作成し、ユーザーが以前にログインしているかどうかをチェックする条件文を作成する必要があります。

0

のはsign_up後に、特定のページを示す間の瞬間を呼ぼう - 特定のページのコントローラーにあなたが知る必要があるので、状態A. - あなたは

1でそれを達成することが可能な状態Aのユーザです)サインアップして特定のページを表示した後に状態をリセットした後、ユーザーが状態Aになったことをdb(サーバー側)に保存します(ページが表示されることを保証するためにクライアント側でリセットを行うことができます)。

2)サインアップした後にクッキー(クライアント側)に保存し、上記のようにします。

第2の解決策は、私の意見では、よりきれいですが、私は一度だけ

+0

クッキーはいつでも破棄することができます。クッキーを信用しないでください。 – max

+0

@maxだから私は一度ショーのルールの重要性を考えたのです。「歓迎」ページのみの場合は、Cookieを削除して再表示することを意図しているユーザーも表示されることはありません –

0

を表示するルールはあなたがその後がUserControllerは、このようなカスタマイズ

rails generate devise:controllers [scope] 

を発行することにより、ユーザーのコントローラを考案カスタマイズすることができますどのように厳密に知りませんユーザーが保存した後、あなたはをチェック詳細についてはそこ 例えば

def create 
    @user = .... 
    if @user.save 
    @user.call_api_method() 
    else 
    ...... 
    end 
end 

あなたのAPIコードを呼び出すことができ

関連する問題