正如我提出的问题,现在我可以在rails app中轻松使用devise_invitable模块。但是,很难迁移到角度js。 我正在尝试使用带有url'/users/invitation.json'的$ http.post来触发服务器端的邀请。
$scope.inviteUser = ->
$http.post('/users/invitation.json',
email: $scope.email
).success (data) ->
_log "successful"
日志文件显示
Started POST "/users/invitation.json" for 127.0.0.1 at 2014-10-24 03:48:49 +1100
Processing by Devise::InvitationsController#create as JSON
Parameters: {"email"=>"sample@mail.com", "invitation"=>{"email"=>"sample@mail.com"}}
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1
Completed 422 Unprocessable Entity in 3ms (Views: 0.1ms | ActiveRecord: 0.3ms)
我可以发现问题可能是凭证。 params显然错过了
"authenticity_token"=>"MEAh9r7vD8cUxXQH9+qnjykHKV8OeC+fvuNW6Whsewg="
但不知道如何修复它。在普通的rails应用程序中,每件事情都顺利。我可以将电子邮件发送到user_invitation_path以邀请新用户。 而且我对棱角分明的js很新,有没有人可以帮助我呢?
答案 0 :(得分:1)
几小时后我发现代码有什么问题。代码中有2个问题。首先,我应该手动添加csrf,这应该是
myAngularApp.config([
"$httpProvider", function($httpProvider) {
$httpProvider.defaults.headers.common['X-CSRF-Token'] = $('meta[name=csrf-token]').attr('content');
}
或者只是一种更简单的方法是使用宝石
# Gemfile
gem 'angular_rails_csrf'
其次,在控制台中,我可以使用User.invite!(:email =>“123@example.com”)发送邀请,因为该电子邮件已被包装为User对象中的属性。所以在$ http请求中,我们不能直接使用电子邮件作为参数。
$scope.inviteUser = ->
user = {
email: $scope.email
}
$http.post('/users/invitation',
user: user
)
最后一切都运作良好!!