45 votes

Devise authentification API

Je suis en train de travailler sur un des rails application web qui fournit également JSON API pour les appareils mobiles . mobile, les clients doivent d'abord obtenir un jeton (e-mail/pass), les clients pourront faire des resultants des appels d'API avec le jeton.

Je suis assez nouveau à Concevoir, et je suis à la recherche d'un legs de l'API de ressembler à "authentifier(e-mail, laissez-passer), et s'attendre à retourner true/false, puis, sur la base que j'ai créer et remettre le jeton ou le retour d'une baisse de message. mais il semble Concevoir ne fournit pas quelque chose comme ça.

Je suis conscient que Concevoir 1.3 fournit JSON en fonction auth, mais c'est un peu différent de ce dont j'ai besoin - j'ai besoin de générer un jeton et le manche pour le client, puis après que l'authentification se fait en utilisant le jeton de la place.

Quelqu'un peut-veuillez donner quelques conseils?

49voto

Jesse Wolgamott Points 30552

Il y a un dispositif de configuration appelé :token_authenticatable ... Donc si vous l'ajouter à la devise de la méthode dans votre "user", vous pouvez vous authentifier auprès de votre API juste en appelant

"/api/v1/recipes?qs=sweet&auth_token=[@user.auth_token]"

Vous voudrez probablement dans votre utilisateur ainsi:

before_save :ensure_authentication_token

Mise à JOUR (avec l'API code d'autorisation)

La méthode que vous cherchez sont:

resource = User.find_for_database_authentication(:login=>params[:user_login][:login])
resource.valid_password?(params[:user_login][:password])

voici mon résumé à une gamme complète de JSON/API de connexion avec concevoir

2voto

janders223 Points 2332

Je recommanderais de lire le wiki de Devise , car Devise supporte nativement l'authentification par jeton en tant que module. Je n'ai pas personnellement travaillé avec l'authentification de jeton dans Devise, mais Brandon Martin a un exemple d'exemple d'authentification de jeton ici .

1voto

chris_b Points 820

Devise est basé sur Warden, un middleware d’authentification pour Rack.

Si vous devez implémenter votre propre méthode (alternative) d'authentification d'un utilisateur, vous devez consulter Warden en combinaison avec les stratégies fournies avec Devise: https://github.com/plataformatec/devise/tree/master/lib / élaborer / stratégies

1voto

Swards Points 3017

Si le jeton d'authentification n'est tout simplement pas ce que vous voulez faire, vous pouvez également retourner un cookie et le client comprennent le cookie dans l'en-tête de requête. Il fonctionne de manière très similaire pour les sessions web du contrôleur.

Dans une API séances de contrôleur

class Api::V1::SessionsController < Devise::SessionsController

  skip_before_action :authenticate_user!
  skip_before_action :verify_authenticity_token

  def create
    warden.authenticate!(:scope => :user)
    render :json => current_user
  end

end

Dans Les Itinéraires

namespace :api, :defaults => { :format => 'json' } do
  namespace :v1 do
    resource :account, :only => :show
    devise_scope :user do
      post :sessions, :to => 'sessions#create'
      delete :session, :to => 'sessions#destroy'
    end
  end
end

Ensuite, vous pouvez faire ce genre de chose (par exemple en utilisant HTTPie)

http -f POST localhost:3000/api/v1/sessions user[email]=user@email.com user[password]=passw0rd

Les en-têtes de réponse aura une séance en-tête Set-Cookie. Mettre la valeur du présent dans les demandes ultérieures.

http localhost:3000/api/v1/restricted_things/1 'Cookie:_my_site_session=<sessionstring>; path=/; HttpOnly'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X