Jeton d'authentification avec des Rails et de Concevoir
Je suis la suite de cet excellent article de configuration de l'authentification partie de mes rails (3.2) de l'API:
http://blog.joshsoftware.com/2011/12/23/designing-rails-api-using-rabl-and-devise/
J'ai fait l'étape suivante:
Ajoutée imaginer Gemfile
-Permis de concevoir pour le modèle de l'utilisateur et a couru les migrations nécessaires
-Mon modèle utilisateur est
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
devise :token_authenticatable
attr_accessible :email, :authentication_token, :password, :password_confirmation, :remember_me
end
ainsi que la token_authenticable dans la Base de données (via une migration).
-Sous-classé le RegistrationController avec:
class RegistrationsController < Devise::RegistrationsController
def new
super
end
def create
resource = warden.authenticate!(:scope => resource_name, :recall => " {controller_path}#new")
sign_in(resource_name, resource)
current_user.reset_authentication_token!
respond_with resource, :location => after_sign_in_path_for(resource)
end
def update
super
end
end
Routes.rb, j'ai:
devise_for :users, :controllers => {:registrations => "registrations"}
LA CRÉATION D'UN UTILISATEUR
J'aimerais la suite de la demande à un utilisateur de créer et d'envoyer la authentification_token:
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"user":{"email":"[email protected]", "password":"pass"}}' 'http://localhost:3000/users.json
Ma compréhension est que la logique devrait aller dans le "créer" la méthode de l'enregistrement contrôleur (qui devrait créer l'utilisateur et le journal lui en même temps). Je pense que je devrais être à tort que le message que j'ai reçu en retour:
{"error":"You need to sign in or sign up before continuing."}
Quelle est la pièce manquante pour le nouvel utilisateur créé et enregistré ? N'est pas le POST pour les utilisateurs.json mappé à RegistrationController#créer ?
LA CONNEXION DE L'UTILISATEUR
Aussi, j'aimerais que la demande de connecter un utilisateur (le renvoyer son authentification_token une fois le login /mot de passe ont été cochée)
curl -H "Accept: application/json" -H "Content-type: application/json" -X GET -d '{"user":{"email":"[email protected]","password":"pass"}}' 'http://localhost:3000/users.json
Je suppose que la logique devrait aller dans la "mise à jour" méthode de RegistrationController mais pas à 100% sûr à ce sujet. Une fois que la connexion est faite, je vais ajouter ensuite le jeton d'authentification pour protéger la création ou de l'avis de certains autres modèles.
Mise à JOUR
Quand j'question:
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"user":{"email":"[email protected]", "password": "mypass", "phone":"1234567890"}}' 'http://localhost:3000/users.json'
J'ai eu le message suivant:
Started POST "/users.json" for 127.0.0.1 at 2012-03-11 20:50:05 +0100
Processing by RegistrationsController#create as JSON
Parameters: {"user"=>{"email"=>"[email protected]", , "password"=>"[FILTERED]", "phone"=>"1234567890"}, "registration"=>{"user"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "phone"=>"1234567890"}, "action"=>"create", "controller"=>"registrations", "format"=>"json"}}
WARNING: Can't verify CSRF token authenticity
Completed 401 Unauthorized in 1ms
Des idées pourquoi l'utilisateur n'est pas créé et signé et pourquoi pas authentication_token est de retour ?
OriginalL'auteur Luc | 2012-03-09
Vous devez vous connecter pour publier un commentaire.
C'est de ma faute, je vais mettre à jour le blog.
Vous devez ajouter le code suivant pour créer l'utilisateur dans inscription contrôleur
Laissez-moi savoir si vous rencontrez le moindre problème?
Vous devez ajouter la ligne suivante dans sessions_controller#création de la méthode après la
sign_in(resource_name, resource) current_user.reset_authentication_token
OriginalL'auteur Sethupathi
Concernant Luc question, c'est ma compréhension.
Par exemple, l'utilisation par défaut de l'API de connexion,
SessionsController.create
gère la connexion. Comment puis-je récupérer leauthentication_token
et de le réutiliser dans le cadre des appels d'API plus tard?Aussi, comment puis-je remplacer la
SessionsController.create
appelerresource.reset_authentication_token!
?OriginalL'auteur Dean