我在Ruby on Rails中有一个网站,它可以运行。现在,我正在开发一个移动应用程序来补充该网络。我正在使用Cordova和AngularJS(v1.2.13)。
使用该应用程序(作为用户)的第一步是使用与Web中相同的凭据登录。为了将应用程序与数据库连接,我正在开发Rails中的API。
从应用程序登录有效,但在对API进行POST调用时,参数会附加到URL:
http://localhost:3000/api/sign_in?email=user@example.com&password=1234
由于显而易见的原因,这是不安全的。我希望从URL中删除这些参数:
http://localhost:3000/api/sign_in
我不明白为什么没有传递参数'hidden'。我错过了什么?
在我的角色服务中,我有:
app.factory('loginService', ['$resource', 'BASE_URL', function($resource, BASE_URL){
return $resource(BASE_URL + '/api/sign_in', {email:'@email', password:'@password'}, {
'sign_in': {
method: 'POST',
isArray: false,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}
});
}]);
在控制器中:
var logged = loginService.sign_in({email: $scope.email, password: $scope.password},
function(data){ /*do whatever with the data*/}
);
修改
我忘了提到我使用Devise进行身份验证。 路由:
namespace :api do
devise_scope :user do
post "/sign_in", :to => 'sessions#create'
end
end
给了我:
api_sign_in POST /api/sign_in(.:format)
控制器,以防需要:
class Api::SessionsController < Api::ApiController
include Devise::Controllers::InternalHelpers
def create
...
end
end
答案 0 :(得分:0)
我不太熟悉Ruby(就是Ruby,对吧?),但是如果你只是想在不更改URL的情况下点击API端点,这里有一些代码的示例,它一直在为我工作而没有你所描述的问题。我认为最重要的是/:id/:controller
部分。
我希望这会有所帮助,但我正在使用客户端路由,所以这会影响事情。
angular.module('dayakoApp')
.factory('User', function ($resource) {
return $resource('/api/users/:id/:controller', {
id: '@_id'
},
{
changePassword: {
method: 'PUT',
params: {
controller:'password'
}
},
get: {
method: 'GET',
params: {
id:'me'
}
}
});
});
答案 1 :(得分:0)
基本上可以从服务中删除params:
maappServices.factory('loginService', ['$resource', '$http', 'BASE_URL', function($resource, $http, BASE_URL){
return $resource(BASE_URL + '/api/sign_in', {/*REMOVE params from this part*/}, {
'sign_in': {
method: 'POST',
isArray: false
}
});
}]);
现在对api的调用是这样完成的:Started POST "/api/sign_in"
我还删除了标题部分以便工作。