3 votes

PhoneGap Mobile Rails Authentification (concevoir ? authentification à partir de zéro ?)

J'ai une application PhoneGap avec un backend Rails. J'essaie de trouver la meilleure façon d'authentifier un utilisateur depuis l'application mobile en utilisant json.

J'utilise actuellement devise, mais je n'ai pas besoin de l'utiliser . Quel serait le moyen le plus simple de modifier devise pour qu'il fonctionne avec une application mobile dans Phonegap ?

Je sais qu'il y a pas mal de messages sur ce sujet... mais, certains d'entre eux sont dépassés ou semblent être des hacks très complexes. J'espère qu'il y aura des informations plus récentes provenant de projets ou de tutoriels qui ont fait leurs preuves.

Un article que j'ai trouvé suggère également d'utiliser jsonp, mais cela semble également être un hack assez complexe. Vous pouvez le trouver ici : http://vimeo.com/18763953

Je me demande également si je ne ferais pas mieux de commencer par l'authentification à partir de zéro, comme indiqué dans ce Railscast : http://railscasts.com/episodes/250-authentication-from-scratch

Merci !

12voto

Ashitaka Points 8105

Vous devez remplacer la fonction sessions y inscriptions contrôleur. Je vais seulement vous montrer comment remplacer le contrôleur de sessions :

Tout d'abord, allez dans votre modèle d'utilisateur et ajoutez le module Token Authenticatable. Quelque chose comme ceci :

devise :token_authenticatable

before_save :ensure_authentication_token

Modifiez ensuite votre fichier devise.rb pour configurer ce module :

# You can skip storage for :http_auth and :token_auth by adding those symbols to the array below.
config.skip_session_storage = [:token_auth]

# Defines name of the authentication token params key
config.token_authentication_key = :auth_token

Maintenant, modifiez vos routes et pointez vers vos nouveaux contrôleurs :

devise_for :users, :controllers => { :registrations => 'registrations', :sessions => 'sessions' }

Et puis créez votre contrôleur comme ceci :

class SessionsController < Devise::SessionsController
  def create
    respond_to do |format|
      format.html {
        super
      }
      format.json {
        build_resource
        user = User.find_for_database_authentication(:email => params[:user][:email])
        return invalid_login_attempt unless resource

        if user.valid_password?(params[:user][:password])
          render :json => { :auth_token => user.authentication_token }, success: true, status: :created
        else
          invalid_login_attempt
        end
      }
    end
  end

  def destroy
    respond_to do |format|
      format.html {
        super
      }
      format.json {
        user = User.find_by_authentication_token(params[:auth_token])
        if user
          user.reset_authentication_token!
          render :json => { :message => 'Session deleted.' }, :success => true, :status => 204
        else
          render :json => { :message => 'Invalid token.' }, :status => 404
        end
      }
    end
  end

  protected
  def invalid_login_attempt
    warden.custom_failure!
    render json: { success: false, message: 'Error with your login or password' }, status: 401
  end
end

Concevoir a une page à ce sujet mais il ne fait que renvoyer à des guides déjà périmés. Mais peut-être cela vous aidera-t-il.

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