簡體   English   中英

Devise 在發布到不同路線時被注銷

[英]Devise being logged out on post to different route

我對 Devise 有一個非常奇怪的問題。 我設置了一個接受 get 和 post 請求的路由。 在獲取時,它會顯示表單,在發布時,它會提交它。

當我向路由發送 XHR 帖子時,當它到達那里時,它告訴我我沒有登錄,並向我發送未經授權的 401。 之后我必須登錄,然后我可以再試一次。

我已經嘗試了好幾個小時了,我所能弄清楚的是我的 controller 方法沒有被調用。 我在過濾器之前放入了我自己的自定義身份驗證,它只是確認當我的 rails 應用程序被調用時,用戶不再登錄。

另外,如果我打開表格但不提交,我可以照常繼續。 在那個 XHR 的某個地方,它讓 devise 讓我退出。

如果你有任何想法請幫忙,我不知道現在發生了什么......

謝謝

-斯科特

編輯:添加相關的代碼

路線.rb

match 'projects/:p/filebox' => 'projects#show', :via => ["get","post"], :as => 'project_filebox'

項目控制器.rb

before_filter :authenticate_user! # <--- By the time this gets called, the user is logged out
def show
# ^^^^ Doesnt get called. Logger shows that it recognized route though
logger.debug "-----------projects#show"
logger.debug "Current user logged in:"+user_signed_in?.to_s

正在提交的表格

<form class="upload" action="<%= project_filebox_path(@project) %>?n=7&cType=<%= cType %>&fid=<%= fid %>" method="post" enctype="multipart/form-data">
    <input type="file" name="file" multiple/>
    <button>Upload</button>
    <div>Add / Drag Files To Upload</div>
</form>

正在上傳 XHR 的 Javascript

formDataUpload = function (files, xhr, settings) {
            var formData = new FormData(),
                i;
            $.each(getFormData(settings), function (index, field) {
                formData.append(field.name, field.value);
            });
            for (i = 0; i < files.length; i += 1) {
                formData.append(settings.fieldName, files[i]);
            }
            xhr.send(formData);
        }

如果我錯過了一些相關的代碼,請告訴我

除了 JS 之外,這里的 go 並沒有那么多,但是你遇到了一個非常強烈的變化,因為 CSRF 令牌沒有被設置為你的請求的一部分。 這在各種 Rails 3.0.x 版本中發生了變化,所以如果沒有代碼就很難確定。

一個非常簡單的測試是關閉 CSRF(例如從 ApplicationController 中刪除protect_from_forgery)。 如果它有效,您就有了答案,並且需要確保令牌被傳遞,否則您將處理偽造保護。

當我在一頁中有兩個 forms 時遇到了同樣的問題,其中一個發布到應用程序內的路由,另一個發布到外部地址。 John Paul Ashenfelter 說得對,它與 JS 無關。

和你一樣,我不想為整個站點禁用 CSRF。 我最終為發布到 controller 中的場外地址的方法禁用了防偽保護:

protect_from_forgery :except => [:some_method]

並以創建此 CSRF 問題的形式:

<%= form_for :some_model, authenticity_token: false do%>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM