Ruby On Rails应用程序与angularJS关于AJAX
Ruby On Rails Application with angularJS about AJAX
我是angularJS和Rails的新手,我尝试用angularJS 构建Rails应用程序
现在,我想做一个POST请求,发送数据插入数据库
活动控制器
def create
@activity = Activity.new(params[:activity])
respond_to do |format|
if @activity.save
format.html {redirect_to activities_url}
format.json { render activities_url, status: :created, location: @activity}
end
end
end
活动咖啡JS
app = module('activity', ['ngAnimate'])
app.controller 'FormCtrl', ($scope, $http) ->
config = {
header: {
'Content-Type': 'application/json'
}
}
@test = ->
$http.post('/activities.json', {title: 'test1'}, config).success (data, status) ->
console.log(data)
console.log(status)
return
控制台日志
Started POST "/activities.json" for ::1 at 2016-05-04 21:06:10 +0800
Processing by ActivitiesController#create as JSON
Parameters: {"title"=>"test1", "activity"=>{"title"=>"test1"}}
Can't verify CSRF token authenticity
Completed 422 Unprocessable Entity in 2ms (ActiveRecord: 0.0ms)
我创建了一个ng-click按钮来触发测试功能,但我得到了控制台日志等信息,我该如何修复它?
这里有一个很好的答案:在不禁用CSRF保护的情况下设计Rails API
其要点是,您可以将CSRF令牌放入一个名为XSRF-TOKEN
的cookie中,如下所示:
# In my ApplicationController
after_filter :set_csrf_cookie
def set_csrf_cookie
if protect_against_forgery?
cookies['XSRF-TOKEN'] = form_authenticity_token
end
end
然后,您必须在ApplicationController中重载verified_request?
方法来加载Angular将返回的令牌:
protected
def verified_request?
super || valid_authenticity_token?(session, request.headers['X-XSRF-TOKEN'])
end
(不过,请阅读我包含的链接……有一些注意事项,但我认为你无论如何都想要这样的东西……基本上,你的登录操作不应该受到csrf的保护,但其他潜在的破坏性操作应该受到保护。你可以用skip_before_filter
实现这一点。)
我希望这能有所帮助!
我相信实现这一点的最快方法是使用helper方法form_authenticity_token
。
$http({
method: 'POST',
url: '<%= some_path %>',
params: {
authenticity_token: '<%= form_authenticity_token %>',
... // Other params
}
})
没有必要取消CSRF,我根本不建议取消。
您的问题是rails的一个功能,旨在击败所谓的"跨站点请求伪造"。Rails团队已经在他们的网站上详细描述了这一点,但基本上这是一个生成的令牌,旨在确保生成对web api的请求的表单是您提供的表单。这通常会给单页AJAX应用程序带来麻烦。
"快速解决方案"是通过在控制器中添加类似内容来禁用CSRF。
protect_from_forgery :except => :create
希望这能有所帮助!
相关文章:
- 关于复杂JSON解析(angularjs和javascript)的问题
- Ruby On Rails应用程序与angularJS关于AJAX
- AngularJS:关于实例化服务
- 关于使用Zurb's基金会+AngularJS
- 关于“AngularJS与Plupload一起工作”的一些问题
- AngularJS工厂$rootScope$关于清理
- 关于在IE8的iFrame中运行AngularJS应用程序的空白页
- AngularJS$范围$关于多个事件
- AngularJS关于编译器的文档是有误导性的
- AngularJS -关于指令的困惑
- 关于Johnpapa AngularJS异常捕获器
- AngularJS:关于ContentEditable的问题
- Angularjs中关于ngRepeat的问题
- Angularjs order关于切换和移除order
- 关于AngularJS中数据绑定的疑问
- AngularJS中关于模型更新的Reinvoke函数
- 无法创建属性“”;appState”;关于数字“;200〃;使用AngularJS
- AngularJs的iOS应用-关于背景模糊的弹出屏幕的建议
- AngularJS关于如何在每个.js文件中使用服务
- 关于AngularJs中的ngCookies