【发布时间】:2015-02-25 04:34:01
【问题描述】:
我有一个 Rails 和 Ionic 项目。后端使用 devise_token_auth Gem,前端使用 ng-token-auth;这些应该“无缝”工作。
就注册和登录而言,我已经完成了所有工作,这将返回一个有效的响应对象。但是,在我使用 $state.go('app.somepage') 之后的任何进一步请求都会导致 401 Unauthorized 响应。
我感觉我实际上并没有将令牌存储在任何地方。有人可以帮忙吗?
这里有一些sn-ps:
.controller('LoginCtrl',['$scope', '$auth', '$state', function($scope, $auth, $state) {
$scope.loginForm = {}
$scope.handleLoginBtnClick = function() {
console.log($scope.loginForm);
$auth.submitLogin($scope.loginForm)
.then(function(resp) {
$state.go('app.feed');
})
.catch(function(resp) {
console.log(resp.errors);
});
};
状态定义:
.state('app', {
url: "/app",
abstract: true,
templateUrl: "templates/menu.html",
controller: 'AppCtrl',
resolve: {
auth: function($auth) {
return $auth.validateUser();
}
}
})
资源:
factory('Post', ['railsResourceFactory', 'apiUrl', function (railsResourceFactory, apiUrl) {
return railsResourceFactory({
url: apiUrl + '/posts',
name: 'post'
});
}]).
在 PostsCtrl 中:
$scope.loadFeed = function() {
Post.query().then(function (posts) {
$scope.posts = posts;
}, function (error) {
console.log( 'Did not get posts!'); ### THIS FIRES
}).finally(function() {
// Stop the ion-refresher from spinning
$scope.$broadcast('scroll.refreshComplete');
});
};
登录响应对象:
{"data":{"id":1,"provider":"email","uid":"1234","phone":null,"name":"Admin","image":null,"username":"admin"}}
ApplicationController 顶部:
class ApplicationController < ActionController::Base
include DeviseTokenAuth::Concerns::SetUserByToken
before_filter :add_allow_credentials_headers
before_filter :cors_preflight_check
after_filter :cors_set_access_control_headers
before_action :configure_permitted_parameters, if: :devise_controller?
..yadayada...
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) << :phone
devise_parameter_sanitizer.for(:sign_up) << :username
devise_parameter_sanitizer.for(:sign_up) << :session
devise_parameter_sanitizer.for(:sign_in) << :phone
devise_parameter_sanitizer.for(:sign_in) << :username
devise_parameter_sanitizer.for(:sign_in) << :session
end
还有一些默认的用户模型。
Rails 日志:
Started GET "/posts" for 192.168.83.26 at 2015-02-24 23:29:02 -0500
Processing by PostsController#index as JSON
Parameters: {"post"=>{}}
Filter chain halted as :authenticate_user! rendered or redirected
Completed 401 Unauthorized in 1ms (Views: 0.2ms | ActiveRecord: 0.0ms)
如果有人能提供一些见解,那就太好了。我很乐意根据需要发布更多 sn-ps。
【问题讨论】:
-
我还没有阅读你的整个问题,但是我用 Lynn Dylan Hurley 的库写了一篇关于 Rails/Angular 身份验证的完整文章。 airpair.com/ruby-on-rails/posts/…
-
另外,我不知道你的问题的答案,但在你的情况下我会做的只是启动一个空白的新项目并按照我的教程,看看它是否有效。然后,如果教程有效,看看你的项目和教程有什么不同。
-
这个项目进展如何?我在做一些非常相似的事情并且遇到了问题,你开源了吗?
-
不,但是如果您阅读下面我选择的答案,那应该会给您一个线索。我不允许开源代码。 :(
标签: ruby-on-rails angularjs devise ionic