Sco*_*ice 13 ruby-on-rails devise
我和Devise有一个非常奇怪的问题.我有一个路由设置,接受get和post请求.在获取时,它显示表单,在帖子上,它提交它.
当我发送XHR邮件到路线时,当它到达那里时,它告诉我我没有登录,并且发送给我一个未经授权的401.之后我必须登录,然后我可以再试一次.
我一直试图弄清楚这几个小时,我能够弄清楚的是我的控制器方法没有被调用.我在过滤之前放入了我自己的自定义身份验证,它刚刚确认,当我的rails应用程序被调用时,用户不再登录.
此外,如果我打开表单,但不提交,我可以继续正常.在那个XHR的某个地方,它正在制定设计.
如果您有任何想法请帮忙,我不知道现在发生了什么......
谢谢
斯科特
编辑:添加相关的代码片段
的routes.rb
match 'projects/:p/filebox' => 'projects#show', :via => ["get","post"], :as => 'project_filebox'
Run Code Online (Sandbox Code Playgroud)
projects_controller.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
Run Code Online (Sandbox Code Playgroud)
正在提交的表单
<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>
Run Code Online (Sandbox Code Playgroud)
正在上传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);
}
Run Code Online (Sandbox Code Playgroud)
如果我错过了一些相关的代码,请告诉我
Joh*_*ter 24
除了JS之外,没有太多可以继续进行的了,但是由于CSRF令牌没有被设置为您的请求的一部分,因此您遇到了问题.这已经在各种Rails 3.0.x版本中发生了变化,如果没有代码,很难确定.
一个死的简单测试是关闭CSRF(例如从ApplicationController中删除protect_from_forgery).如果它工作,你有答案,需要确保令牌传递或你否则处理伪造保护.
| 归档时间: |
|
| 查看次数: |
2947 次 |
| 最近记录: |