2015-03-09 12 views
8

Ich habe eine Rails 4.1 Application läuft mit Devise für die Authentifizierung.Rails Devise und devise_token_auth. Ich arbeite nicht mit

Für den Zugriff über mobile Apps i-Token-Auth mit dem empfohlenen devise_token_auth gem implementieren möchte. Ich benutze Omniauth nicht

Die Funktionalität der bestehenden App nicht geändert werden soll.

Was ich tat:

installiert devise_token_auth über gemfile.

den Generator benutzt: Schienen g devise_token_auth: Benutzer-Auth

die Migration erforderlichen Felder hinzuzufügen geändert installieren. Migration fehlgeschlagen wegen Omniauth fehlt. Also habe ich es auch installiert.

Changed routes.rb

devise_for :users, :skip => [:sessions, :registrations, :omniauth_callbacks] 
    as :user do 
    get 'register' => 'users/registrations#new', :as => :new_user_registration 
    post 'register' => 'users/registrations#create', :as => :user_registration 
    get 'sign_in' => 'devise/sessions#new', :as => :new_user_session 
    post 'sign_in' => 'devise/sessions#create', :as => :user_session 
    delete '/' => 'users/sessions#destroy', :as => :destroy_user_session 
    end 

hinzugefügt:

namespace :api do 
scope :v1 do 
    mount_devise_token_auth_for 'User', at: 'auth', skip: [:omniauth_callbacks] 
end 

Ende

Benutzer Modell ich habe:

devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable, 
    :confirmable, :timeoutable, :lockable 
include DeviseTokenAuth::Concerns::User 

Jetzt, wenn ich versuche, einen neuen sign_up Benutzer gibt mir die va lidierung Fehler:

Uid darf nicht leer sein

Hat jemand hatte das gleiche Problem und es gelöst?

Was ich seltsam finde ist, dass es braucht Omniauth installiert haben.

Update:

überschreiben ich die Devise Registrierung Controller-Aktion erstellen:

build_resource(sign_up_params) 
resource.uid = resource.email 
resource.provider = '' 

Jetzt, als ich sign_in i erhalten:

{ "Fehler": [ "Berechtigte nur."] }

im Browser.

+0

Welche Version des Edelsteins verwenden Sie? Ich versuche dasselbe zu machen, aber ich bekomme einen Fehler. –

+0

derzeit: devise_token_auth 0.1.32.beta2 – yaster

+0

Sie sagten Sie "Die Migration wurde geändert, um die erforderlichen Felder hinzuzufügen." Was waren das? Gab es einen Leitfaden, dem du gefolgt bist? Ich versuche, devise_token_auth zu meiner bestehenden, angepassten Devise-Implementierung hinzuzufügen. –

Antwort

0

Nun, ich bin zu kämpfen derzeit mit der gleichen Sache. Ich versuche, Devise devise_token_auth hinzuzufügen, und es funktioniert nicht so weit für mich.

Soweit dies geht, reden Sie „sign_up“ für Devise oder devise_token_auth? Wenn es für Devise ist, nahm ich an, dass die Einstellung uid=email vor dem Erstellen des Datensatzes dies lösen würde.

+0

Ich brauche beides. Melde dich über Devise und über devise_token_auth an – yaster

4

Hinzufügen der folgenden app/models/user.rb:

before_validation do 
    self.uid = email if uid.blank? 
end 

hat es für mich. Stellen Sie außerdem sicher, dass der Anbieter auf "E-Mail" für "Anbieter" eingestellt ist.

0

Dieser Fehler wird durch devise_token_auth, nicht durch devise angehoben.Im Wesentlichen versucht devise_token_auth, Ihre normalen Entwicklungsrouten auf die gleiche Weise zu authentifizieren, wie es normalerweise eine API-Anfrage authentifizieren würde. Ihre normalen devise Routen werden die Authentifizierung über Sitzung nicht über Token, so dass Sie diese Fehlermeldung erhalten:

{"errors":["Authorized users only."]} 

Es gibt ein paar Dinge, die hier passieren könnte. Stellen Sie zunächst sicher, dass Sie nur nach einer Token-Validierung für die Aktionen Ihrer API-Controller suchen. Stellen Sie daher sicher, dass diese Zeile in Ihrem BaseAPIController und nicht in Ihrem ApplicationController enthalten ist.

include DeviseTokenAuth::Concerns::SetUserByToken 

Die andere Möglichkeit ist, dass Sie einige Namespacing Probleme in Ihrem routes.rb haben. Stellen Sie sicher, dass Sie so etwas haben. Sie müssen zuerst devise_for und den token_auth korrekt namespaced haben oder es wird Validierungen auf Ihren anderen Routen verursachen.

Rails.application.routes.draw do 

    devise_for :admins 

    namespace :api do 
    scope :v1 do 
     mount_devise_token_auth_for 'user', at: 'auth' 
    end 
    end 
end 

Viel Glück!

Verwandte Themen