2014-10-23 2 views
2

Как вопрос, который я задаю, теперь я могу легко использовать модуль devise_invitable в приложении rails. Однако трудно перейти к угловым js. Я пытаюсь использовать $ http.post с url '/users/invitation.json', чтобы вызвать приглашение на стороне сервера.интегрировать devise_invitable с угловыми js в rails4

$scope.inviteUser = -> 
    $http.post('/users/invitation.json', 
    email: $scope.email 
).success (data) -> 
    _log "successful" 

Файл журнала показывает, что

Started POST "https://stackoverflow.com/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"=>"[email protected]", "invitation"=>{"email"=>"[email protected]"}} 
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) 

Я могу понять, что проблема может быть удостоверение. Параметры, по-видимому, отсутствуют

"authenticity_token"=>"MEAh9r7vD8cUxXQH9+qnjykHKV8OeC+fvuNW6Whsewg=" 

Но не знаю, как это исправить. В приложении с обычными рельсами все идет хорошо. Я могу отправить электронное сообщение пользователю_invitation_path, чтобы пригласить нового пользователя. И я действительно новичок в угловых js, может ли кто-нибудь помочь мне в этом?

ответ

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 protected]»), чтобы отправить приглашение, потому что электронное письмо было обернуто как атрибут в объекте пользователя. Таким образом, в запросе $ http мы не можем напрямую использовать электронную почту в качестве параметра.

$scope.inviteUser = -> 
    user = { 
     email: $scope.email 
    } 
    $http.post('/users/invitation', 
     user: user 
    ) 

И наконец, все работает хорошо!

Смежные вопросы