私は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
ああ見るので 'image_action'がログアウトし、ユーザーがボタンを表示しているときにのみ存在することになるダミーのアクションのようになります。私は 'current_user'が必要ではありません。' current_user'はjqueryを使用してログインしているユーザーのモーダルを切り替えているので、このアクションにはアクセスできません。 – user4584963
私はそれを正確に考えていませんでした。ユーザーにログインしたユーザーが尋ねたものを取得し、未認証のユーザーがログインページにリダイレクトされるような、ダミーアクションやフォークアクションの可能性は低いです。 'if current_user'の部分は、リンクをクリックした全員が' image_action'アクションに送られるので、まだ重要です。そのため、ログインしているかどうかを知ることができなければなりません。私は100%あなたの質問を理解していないかもしれませんが、このリンクは同期または非同期要求をしていますか?リンクをクリックするだけでモーダルが表示されるかリダイレクトされるようにする必要がある場合は、jsonをレンダリングする必要があります。 –
私のビューでは、ユーザーがログインしている場合、モーダルを起動するためのクリックハンドラを持つhtml要素がありますが、ログアウトしたユーザーにとってはリンク付きのボタンです。それは私がとにかく計画していたものです。 – user4584963