Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Json Authentication to Devise

I am trying to setup json based authentication on my current rails app. The app's authentication is currently handled by devise.

I have read couple of questions on stackoverflow, but I do not seem to get it working.

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

Not sure where I have gone wrong. The call I am making is:

JSON:

Content-Type: application/json
Accept: application/json
data: {user: {password: mypass, email: [email protected]}}

The Error:

MultiJson::DecodeError (756: unexpected token at '{user: {password: mypass, email:    [email protected]}}'):
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'
like image 562
Karan Avatar asked Jun 08 '26 04:06

Karan


1 Answers

If you paste that JSON into http://jsonlint.com, you get the same error.. Instead, you should wrap your values in quotes:

{
    "user": {
        "password": "mypass",
        "email": "[email protected]"
    }
}
like image 98
Jesse Wolgamott Avatar answered Jun 10 '26 03:06

Jesse Wolgamott



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!