2017-06-08 5 views
0
にアクセスしています

私はDevise 3.5.2を使用しています。私はItemモデルで、誰でもアクセスできるショーアクションを持っています(before_filter :authenticate_user!, except: :show)。ショーページでは、jqueryを使用してファイルアップロードダイアログをトリガーするボタンがあります。Devise - ページ上のsign_inをトリガーする方法ユーザーは既に

私はこのアップロードダイアログがログインしているユーザーでのみ機能するようにしたいと思います。ユーザーがログアウトしてボタンをクリックすると、ログインページに表示されます。彼らがログインすると、ショーページに戻ってきます。

このリンクをクリックするとログインページが表示され、ログインした後、直前のページにリダイレクトされてアクセスできます。

<% unless current_user %> 
    <%= link_to "Upload image", item_path @item, class: "btn btn-lg btn-success" %> 
<% end %> 

これは既にこのページにアクセスできるため動作しません。

編集:私はここにこのリンクを試してみましたhttps://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-on-successful-sign-inしかし、それは動作していないようです。

セッションコントローラは次のようになります。多分、私の作成メソッドが競合を引き起こしているのでしょうか?

class SessionsController < Devise::SessionsController 

    def new 
    self.resource = resource_class.new(sign_in_params) 
    store_location_for(resource, params[:redirect_to]) 
    super 
    end 


    def create 
    self.resource = warden.authenticate!(auth_options) 
    if resource.deactivated? 
     set_flash_message(:notice, :reactivated) if is_flashing_format? 
     resource.reactivate 
    end 
    sign_in(resource_name, resource) 
    yield resource if block_given? 
    respond_with resource, location: after_sign_in_path_for(resource) 
    end 
end 

答えて

1

コントローラ固有のコードが必要なようです。

def image_action # Whatever the action name is 
     if current_user # current user is given to you by devise 
     # Do stuff that a logged in user would do 
     else 
     # redirect to login page 
     end 
    end 

ビューの外にロジックを離れ、代わりにいずれかのコントローラがログに記録されたサービスを提供しているということでアイデア:

ユーザーがリンクをクリックすると、対応するアクションを持っているが、このような何かをユーザーに適切なデータ/ページを送信するか、認証されていないユーザーがログインページにリダイレクトされます。

current_userはどちらか、現在のユーザーがログインしていない場合は、要求またはnilを作るログインしているユーザーに評価の工夫によってあなたに与えられた方法である。

あなたのコントローラのコードを投稿した場合、私は、ファイルよ私のコード例の多くは、あまりにも特定のものを混乱させる危険にさらされたくないと思っていました。

+0

ああ見るので 'image_action'がログアウトし、ユーザーがボタンを表示しているときにのみ存在することになるダミ​​ーのアクションのようになります。私は 'current_user'が必要ではありません。' current_user'はjqueryを使用してログインしているユーザーのモーダルを切り替えているので、このアクションにはアクセスできません。 – user4584963

+0

私はそれを正確に考えていませんでした。ユーザーにログインしたユーザーが尋ねたものを取得し、未認証のユーザーがログインページにリダイレクトされるような、ダミーアクションやフォークアクションの可能性は低いです。 'if current_user'の部分は、リンクをクリックした全員が' image_action'アクションに送られるので、まだ重要です。そのため、ログインしているかどうかを知ることができなければなりません。私は100%あなたの質問を理解していないかもしれませんが、このリンクは同期または非同期要求をしていますか?リンクをクリックするだけでモーダルが表示されるかリダイレクトされるようにする必要がある場合は、jsonをレンダリングする必要があります。 –

+0

私のビューでは、ユーザーがログインしている場合、モーダルを起動するためのクリックハンドラを持つhtml要素がありますが、ログアウトしたユーザーにとってはリンク付きのボタンです。それは私がとにかく計画していたものです。 – user4584963

0

あなたのコントローラで既にlogged_inユーザーを検証するためにbefore_action :authenticate_user!が使用されています。あなたが好きなページにリダイレクトするためにそのメソッドをオーバーライドするだけです。あなたのapplication_controller.rb

def authenticate_user! 
    if user_signed_in? 
    super 
    else 
    redirect_to whatever_path 
    end 
end 
+0

これは私がこのショーページに特有の動作です。私は、ログアウトしたユーザーにアクセスできない他のページをサイト上に持っています。これらの他のすべてのページが、自分のアイテムコントローラのこのショーアクションにリダイレクトされることは望ましくありません。 – user4584963

+0

あなたは、ユーザーがログインしていないページにリダイレクトするだけです。ハードコードのリダイレクトは必要ありませんが、ページを処理するために一般化してください。 –

+0

ユーザーがアクセスしようとしているページはユーザーが現在行っているページ。ログインしたユーザーがボタンをクリックするとモーダルが開きます。ログインしたユーザーがボタンをクリックすると、ログインできるページに移動する必要があります。ログインすると、モーダルを開くことができるように、このページにリダイレクトされます。 – user4584963

関連する問題