2016-04-28 2 views
1

Я пытаюсь использовать Facebook для подключения и регистрации в приложении Meteor.js. В моем шаблоне входа я надел кнопку, чтобы сделать это. Я вызываю функцию Meteor.loginWithFacebook(), но она не работает ... Я предполагаю, что Meteor пытается создать нового пользователя и что он не находит информацию о имени пользователя, но я не знаю, как управлять этим ,Проблема при регистрации и регистрации в Facebook в 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); 
     } 
    }); 
} 

Ошибка у меня есть: схема

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] 

Пользователь:

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 
    } 
} 
}); 

Спасибо за любую помощь!

+0

Для меня это выглядит, как вы определили схему по сбору Meteor.users, который требует имя. – aedm

+0

@aedm Да, у меня есть, но как я говорю Метеору использовать имя пользователя Facebook в этом поле? Это сложная часть для меня ... –

+0

Пожалуйста, включите схему в описание проблемы. – aedm

ответ

1

Проблема заключается в том, что для вашей схемы требуется Meteor.users, чтобы иметь поле username, которое по умолчанию не содержит. Однако вы можете сгенерировать это поле, выбрав свое имя в профиле Facebook.

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

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

+0

Спасибо, это очень хорошо! Мне просто сложно получить имя пользователя учетной записи Facebook. У меня есть электронная почта, имя и фамилия только ... –

+0

на самом деле это работает для Google, но у меня все еще есть проблемы с Facebook, но я не знаю, почему, потому что нет явной ошибки ... –

Смежные вопросы