2017-06-20 9 views
1

私のアプリでは、Deviseを認証に使用しています。ユーザーは、トークンがパラメータとして添付されたリンクを介して、アプリケーションにsign_inに招待することができます。Rails/Devise:sign_inの後にparamを渡す

リンクが見えます。 g。

https://chaos-jadz.c9users.io/tokens/?token_value=88042c1c-822e-4e80-b911-3c25a41fdc3f 

ユーザーがサインインすると、アプリはルートパスにリダイレクトされます。

私が今したいのは、ユーザーがサインインした後にtoken_valueが存在する場合、トークンをparamとして特定のコントローラ/アクションにリダイレクトすることです。

私は、Deviseが提供するafter_sign_in_pathメソッドについて認識しています。 sign_inを指定したコントローラ/アクションにリダイレクトすることは問題ありません。しかし、私はコントローラ/アクションにもtoken_valueパラメータを渡す方法を知らない。

これは私のsign_inフォーム(私は隠しフィールドとして、ここでのparamを使用しています)です:あなたは助けることはでき

<div class="panel panel-default devise-bs" style="font-family:arial"> 
    <div class="panel-heading"> 
     <h4><%= t('.sign_in', default: 'Sign in') %></h4> 
    </div> 
    <div class="panel-body"> 
     <%= form_for(resource, as: resource_name, url: session_path(resource_name), html: { role: 'form' }) do |f| %> 
     <div class="form-group"> 
      <%= f.label :spielername %> 
      <%= f.text_field :username, autofocus: true, class: 'form-control', placeholder: "player101" %> 
     </div> 
     <div class="form-group"> 
      <%= f.label :password %> 
      <%= f.password_field :password, autocomplete: 'off', class: 'form-control' %> 
     </div> 
     <div class="form-group"> 
      <%= f.hidden_field :token, :value => params[:token_value], class: 'form-control' %> 
     </div> 
     <% if devise_mapping.rememberable? %> 
      <div class="checkbox"> 
      <%= f.label :remember_me do %> 
       <%= f.check_box :remember_me %> <%= t('.remember_me', default: 'Remember me') %> 
      <% end %> 
      </div> 
     <% end %> 
     <%= f.submit t('.sign_in', default: 'Sign in'), class: 'btn btn-primary' %> 
     <% end %> 
    </div> 
    </div> 
    <div class="col-xs-12 shared-links"> 
    <%= render 'devise/shared/links' %> 
    </div> 

+0

これはあなたを助けるかもしれません:https://stackoverflow.com/questions/14355767/how-to-add-parameters-in-url-of-ruby-on-rails – Jaeger

+0

私はこれが役立つか分かりません。私はparamsの使い方を知っています。私の問題は、デベロッパーでサインインした後に、新しいコントローラにこれらを渡す方法がわからないことです。 – Oliver

+0

私はお詫びします、私は私と一緒にテストできるRoRプロジェクトはありませんが、あなたが次のことをすればどうなりますか? (アプリケーションコントローラでは、私が思う) 'def after_sign_in_path root_path、token_value => 'あなたのデータ' end' – Jaeger

答えて

0

あなたは、コード以下そのコントローラ/アクションが

def after_sign_in_path_for(current_user) 
    specific_url(token: params["user"]["token"]) 
end 
0

に動作しますため、特定のURLを持っている場合、私はデフォルトの自動を通じて考案の登録フォームからのparamsを渡そうと類似し、同一でないとして、問題に直面していましたログイン:after_sign_in_path_for(resource)。目標は、新しいユーザーを最初に「サインアップ」ボタンをクリックしたページにルーティングすることでした。 (これはイベントアプリだから、サインアップしたイベントにユーザーを戻す必要があります)

隠しフォームフィールドを含めて、この私のApplicationControllerにで:私はちょうどafter_sign_in_path_for(resource)ブロックでresource.event_tokenを参照

その後
def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:sign_up, keys: [:event_token]) 
end 

def after_sign_in_path_for(resource) 
    if resource.event_token 
    event_path(Event.find_by(token: resource.event_token)) 
    else 
    user_path(resource) 
    end 
end 

もしそうなら、それは発火イベントトークンを持つユーザーがサインイン。もしそうでなければ、それはしません。

resource.tokenと同じことをパスヘルパー内で前方に渡すことができると思います。

関連する問題