【问题标题】:integrate devise_invitable with angular js in rails4将 devise_invitable 与 rails4 中的 Angular js 集成
【发布时间】:2014-10-23 16:56:59
【问题描述】:

作为我提出的问题,现在我可以轻松地在 rails 应用程序中使用 devise_invitable 模块。但是,很难迁移到 Angular 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)

我知道问题可能出在凭证上。参数显然错过了

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

但不知道如何解决。在普通的 Rails 应用程序中,一切都很顺利。我可以将电子邮件发送到 user_invitation_path 以邀请新用户。 而且我真的是 Angular js 的新手,有人可以帮我吗?

【问题讨论】:

    标签: ruby-on-rails angularjs devise-invitable


    【解决方案1】:

    几个小时后,我发现我的代码出了什么问题。代码中有2个问题。首先,我应该手动添加csrf,应该是

    myAngularApp.config([
      "$httpProvider", function($httpProvider) {
         $httpProvider.defaults.headers.common['X-CSRF-Token'] = $('meta[name=csrf-token]').attr('content');
    }
    

    或者只是一种更简单的方法是使用 gem

    # Gemfile
    gem 'angular_rails_csrf'
    

    其次,在控制台中,我可以使用 User.invite!(:email => "123@example.com") 发送邀请,因为电子邮件已作为属性包装在 User 对象中。所以在$http请求中,我们不能直接使用email作为参数。

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

    终于一切顺利!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-09
      • 1970-01-01
      • 2015-12-29
      • 2019-01-04
      • 2021-04-05
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多