我正在使用ember js来验证我的rails api 我的设计会议控制器
module Api
class SessionsController < Devise::SessionsController
def create
unless params[:email] && params[:password]
return invalid_params('You need to provide both email and password')
end
res = User.find_for_database_authentication(email: params[:email])
if res && res.valid_password?(params[:password])
user = res
end
unless user
unless params[:email] && params[:password]
return invalid_params('invalid email or password')
else
return invalid_params('You need to provide both email and password')
end
else
sign_in user
user.ensure_authentication_token!
render json: user ,serializer: UserSerializer ,status: 201
end
end
protected
def invalid_params(errorMessage)
warden.custom_failure!
render json: { errorMessage: errorMessage }, status: 403
end
end
end
我的emberjs auth.js
Auth =Ember.Object.extend({
auth_token: null,
current_user: null,
signIn: function(params) {
return Ember.$.post('http://localhost:3001/api/users/sign_in', params).then((function(_this) {
return function(response) {
return _this.set('auth_token', response.auth_token);
};
})(this));
},
signUp: function(params) {
var mypar = {'user':params};
var that=this;
return Ember.$.post('/users', mypar,function(data){
return that.set('auth_token', data.auth_token);
});
},
signOut: function(){
promise= Ember.$.ajax("/users/sign_out",{
type: "DELETE"
});
var that =this;
promise.then(function(){
that.set("auth_token",null);
});
return promise;
}
});
Remon.Auth =Auth.create();
$.ajaxSetup({
beforeSend: function(xhr, options) {
var encoded_auth_token, header;
if (Remon.Auth.get('auth_token')) {
encoded_auth_token = Base64.encode64(Remon.Auth.get('auth_token') + ":X");
header = "Basic " + encoded_auth_token;
return xhr.setRequestHeader('Authorization', header);
}
},
error: function(xhr) {
if (xhr.status === 401) {
//return window.location = '/#/login';
}
}
});
登录并注册工作也很好我从会话控制器获得了用户身份验证令牌,但登录的会话无法正常工作,因为我试图将json数据传输到另一个路由 它没有在其他控制器中工作我有这些方法
module Api
class ProfilesController < ApplicationController
before_filter :auth_only?
def index
@profiles =Profile.all
end
end
end
在devise.rb中 config.http_authenticatable = [:token]
并在application_controller.rb
中 skip_before_filter :verify_authenticity_token, :if => Proc.new { |c| c.request.format == 'application/json' }
def allow_ajax_request_from_other_domains
headers['Access-Control-Allow-Origin'] = '*'
headers['Access-Control-Request-Method'] = '*'
end
答案 0 :(得分:1)
(正在进行中的答案)
EmberCasts有一个很棒的2部分关于在Ember中实现客户端身份验证的视频。我认为这有助于清理代码的Ember方面。
登录会话不起作用,因为我试图将json数据发送到其他路由时无法正常工作
这听起来像你的Rails方面没有保持登录状态,如果是这种情况,那么我建议你查看Devise并确保你能够使用你的令牌访问API。
我将在接下来的几天内实施Devise + Ember,所以当我自己弄明白时,我会用更多信息更新这个答案。