2016-04-28 7 views
1

Ich versuche, Facebook zu verwenden, um zu verbinden und in meine Meteor.js-Anwendung zu registrieren. In meiner Login-Vorlage habe ich einen Knopf dafür gelegt. Ich rufe die Funktion Meteor.loginWithFacebook(), aber es funktioniert nicht ... Ich vermute, dass Meteor versuchen, einen neuen Benutzer zu erstellen, und dass es die Benutzernameninformationen nicht findet, aber ich weiß nicht, wie das zu verwalten ist .Problem beim Anmelden und registrieren Sie sich mit Facebook in Meteor

'click #facebook-login': function(event) { 
    Meteor.loginWithFacebook({}, function(err){ 
     if (err) { 
      throw new Meteor.Error("Facebook login failed"); 
      Materialize.toast('Echec de connexion!', 4000); 
     } 
     else { 
      Router.go(Utils.pathFor('home')); 
      Materialize.toast('Bon retour parmis nous ' + Meteor.user().username + ' !', 5000); 
     } 
    }); 
} 

Der Fehler habe ich::

Mein Handler den Login rufen

I20160428-12:44:56.099(2)? Exception while invoking method 'login' Error: Nom d'utilisateur is required 
I20160428-12:44:56.100(2)?  at getErrorObject (packages/aldeed_collection2-core/lib/collection2.js:437:1) 
I20160428-12:44:56.101(2)?  at [object Object].doValidate (packages/aldeed_collection2-core/lib/collection2.js:420:1) 
I20160428-12:44:56.101(2)?  at [object Object].Mongo.Collection. (anonymous function) [as insert] (packages/aldeed_collection2-core/lib/collection2.js:173:1) 
I20160428-12:44:56.101(2)?  at AccountsServer.Ap.insertUserDoc (packages/accounts-base/accounts_server.js:1250:25) 
I20160428-12:44:56.101(2)?  at AccountsServer.Ap.updateOrCreateUserFromExternalService (packages/accounts-base/accounts_server.js:1386:20) 
I20160428-12:44:56.102(2)?  at [object Object].Package (packages/accounts-oauth/oauth_server.js:55:1) 
I20160428-12:44:56.103(2)?  at packages/accounts-base/accounts_server.js:464:32 
I20160428-12:44:56.103(2)?  at tryLoginMethod (packages/accounts-base/accounts_server.js:241:14) 
I20160428-12:44:56.103(2)?  at AccountsServer.Ap._runLoginHandlers (packages/accounts-base/accounts_server.js:461:18) 
I20160428-12:44:56.103(2)?  at [object Object].methods.login (packages/accounts-base/accounts_server.js:524:27) 
I20160428-12:44:56.129(2)? Sanitized and reported to the client as: Nom d'utilisateur is required [400] 

Benutzer Schema:

Globals.schemas.UserProfile = new SimpleSchema({ 
firstName: { 
    type: String, 
    regEx: /^[a-zA-Z-]{2,25}/, 
    optional: true, 
    label: "Prénom" 
}, 
lastName: { 
    type: String, 
    regEx: /^[a-zA-Z-]{2,25}/, 
    optional: true, 
    label: "Nom" 
}, 
birthDay: { 
    type: Date, 
    optional: true, 
    label: "Date de naissance", 
    min: new Date("1900-01-01T00:00:00.000Z"), 
    autoform: { 
     value: new Date("1900-10-18T00:00:00.000Z") 
    } 
}, 
gender: { 
    type: String, 
    allowedValues: ['M', 'F'], 
    optional: true, 
    label: "Genre", 
    autoform: { 
     options: [ 
      { 
       label: "Homme", 
       value: "M" 
      }, 
      { 
       label: "Femme", 
       value: "F" 
      } 
     ], 
     firstOption: "(Veuillez sélectionner une réponse)" 
    } 
}, 
level: { 
    type: Number, 
    autoValue: function() { 
     if (this.isInsert) { 
      return 1; 
     } 
    }, 
    autoform: { 
     omit: true 
    }, 
    min: 0, 
    max: 1000, 
    label: "Niveau" 
}, 
picture: { 
    type: String, 
    optional: true, 
    autoform: { 
     omit: true 
    }, 
    label: "Photo" 
} 
}); 

// Schéma principal 
Globals.schemas.User = new SimpleSchema({ 
username: { 
    type: String, 
    regEx: /^[a-z0-9A-Z_]{3,30}$/, 
    label: "Nom d'utilisateur" 
}, 
password: { 
    type: String, 
    label: "Mot de passe", 
    optional: true, 
    autoform: { 
     afFieldInput: { 
      type: "password" 
     } 
    } 
}, 
confirmation: { 
    type: String, 
    label: "Confirmation", 
    optional: true, 
    custom: function(){ 
     if(this.value !== this.field('password').value){ 
      return "passwordMissmatch"; 
     } 
    }, 
    autoform: { 
     afFieldInput: { 
      type: "password" 
     } 
    } 
}, 
emails: { 
    type: [Object], 
    optional: false, 
    label: "Adresses Email" 
}, 
"emails.$.address": { 
    type: String, 
    regEx: SimpleSchema.RegEx.Email, 
    label: "Adresses Email" 
}, 
"emails.$.verified": { 
    type: Boolean, 
    optional: true, 
    autoform: { 
     omit: true 
    } 
}, 
createdAt: { 
    type: Date, 
    autoValue: function() { 
     if (this.isInsert) { 
      return new Date; 
     } else { 
      this.unset(); 
     } 
    }, 
    autoform: { 
     omit: true 
    } 
}, 
profile: { 
    type: Globals.schemas.UserProfile, 
    optional: true 
}, 
services: { 
    type: Object, 
    optional: true, 
    blackbox: true, 
    autoform:{ 
     omit: true 
    } 
}, 
roles: { 
    type: Object, 
    optional: true, 
    blackbox: true, 
    autoform: { 
     omit: true 
    } 
} 
}); 

Dankten für jede Hilfe!

+0

Für mich sieht es aus wie Sie ein Schema auf der Meteor.users Sammlung definiert, die einen Namen erfordert. – aedm

+0

@aedm Ja, habe ich, aber wie sage ich Meteor, den Facebook-Benutzernamen in diesem Feld zu verwenden? Das ist der schwierige Teil für mich ... –

+0

Bitte fügen Sie das Schema in die Problembeschreibung ein. – aedm

Antwort

1

Das Problem ist, dass Ihr Schema benötigt Meteor.users, um ein username Feld zu haben, die sie nicht standardmäßig enthalten. Sie können dieses Feld jedoch generieren, indem Sie ihren Namen aus dem Facebook-Profil übernehmen.

Accounts.onCreateUser(function(options, user) { 
    user.username = user.services.facebook.name; 
    return user; 
}); 

http://docs.meteor.com/#/full/accounts_oncreateuser

+0

Danke, es ist ziemlich gut! Ich habe nur Schwierigkeiten, den Benutzernamen des Facebook-Kontos zu erhalten. Ich habe die E-Mail, den Vornamen und den Nachnamen nur ... –

+0

eigentlich funktioniert es für Google, aber ich habe immer noch Probleme mit Facebook, aber ich weiß nicht warum, weil es keinen expliziten Fehler gibt ... –

Verwandte Themen