我正在尝试在我当前的rails应用程序上设置基于json的身份验证。应用程序的身份验证目前由设计人员处理。
我已经阅读了有关stackoverflow的几个问题,但我似乎没有让它工作。
routes.rb中:
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks", :sessions => 'users/sessions' }
SessionsController:
class Users:: SessionsController < Devise::SessionsController
def create
resource = warden.authenticate!(:scope => resource_name, :recall => :failure)
return sign_in_and_redirect(resource_name, resource)
end
def sign_in_and_redirect(resource_or_scope, resource=nil)
scope = Devise::Mapping.find_scope!(resource_or_scope)
resource ||= resource_or_scope
sign_in(scope, resource) unless warden.user(scope) == resource
return render :json => {:success => true, :redirect => stored_location_for(scope) || after_sign_in_path_for(resource)}
end
def failure
return render:json => {:success => false, :errors => ["Login failed."]}
end
end
不确定我哪里出错了。我正在打电话的是:
JSON:
Content-Type: application/json
Accept: application/json
data: {user: {password: mypass, email: some_email@gmail.com}}
错误:
MultiJson::DecodeError (756: unexpected token at '{user: {password: mypass, email: some_email@gmail.com}}'):
2012-06-30T18:10:10+00:00 app[web.1]: vendor/bundle/ruby/1.9.1/gems/json-1.6.5/lib/json/common.rb:148:in `parse'
答案 0 :(得分:1)
如果将JSON粘贴到http://jsonlint.com中,则会收到相同的错误..相反,您应该将值包装在引号中:
{
"user": {
"password": "mypass",
"email": "some_email@gmail.com"
}
}