2013-09-14 3 views
3

я быть следующий шаг за шагом заказ Войти обучающую от Eventedmind показывая в этой ссылке:Пользовательские Github Войти с Метеор не работает

https://www.eventedmind.com/posts/meteor-customizing-login

Так я создал новое приложение на Github и код, но во время работы Meteor у меня все еще есть ошибки, и ничего не появляется. Я знаю, что у меня есть ошибки со стороны сервера, но я понятия не имею, что это такое, может быть, код плохо написан, или, может быть, так, как я называю логин, это уже не так. Вот что я сделал (я предполагаю, что это так же, как в учебнике)

клиент/index.html

<head> 
    <title>App</title> 
</head> 

<body> 
{{> header}} 
</body> 

<template name="header"> 
    <div class="navbar navbar-inverse"> 
     <div class="navbar-inner"> 
      <div class="container"> 
       <a class="brand" href="#">NewApp</a> 
      <form class="navbar-search pull-left"> 
       <input type="text" class="search-query" placeholder="Search"> 
      </form> 
      <div class="nav pull_right"> 
       {{> user_info}} 
      </div> 
      </div> 
     </div> 
    </div> 
</template> 

<template name="user_info"> 
    <ul class="nav pull-right"> 
    {{#if currentUser}} 
     {{> user_loggedin}} 
    {{else}} 
     {{> user_loggedout}} 
    {{/if}} 
    </ul> 
</template> 


<template name="user_loggedin"> 
    {{#if loggingIn}} 
     <li><a href="">Loggin in...</a></li> 
    {{else}} 
     <li> 
      <img src="{{currentUser.profile.avatar_url}}" class="img-rounded" style="height: 32px; margin-top: 4px;"> 
     </li> 
     <li class="dropdown"> 
      <a href="#" class="dropdown-toggle" data-toggle="dropdown"> 
       {{currentUser.profile.login}} 
       <b class="caret"></b> 
      </a> 
      <ul class="dropdown-menu"> 
       <li><a href="">Accounts Settings</a></li> 
       <li class="divider"></li> 
       <li><a id="logout">logout</a></li> 
      </ul> 
     </li> 
    {{/if}} 
</template> 


<template name="user_loggedout"> 
    <li><a id="login">Login with Github</a></li> 
</template> 

клиент/index.js

Template.user_loggedout.events({ 
    'click #login': function (e, tmpl) { 
    Meteor.loginWithGithub({ 
     requestPermissions: ['user', 'public_repo'] 
    }, function (err) { 
     if (err) { 
     // error handling 
     } else { 
     // show alert 
     } 
    }); 
    } 
}); 

Template.user_loggedin.events({ 
    'click #logout': function (e, tmpl) { 
    Meteor.logout(function (e, tmpl) { 
     if (err) { 
     // show err message 
     } else{ 
     // show alert that says logged out 
     } 
    }); 
    } 
}); 

сервера/конфигурации. JS

Accounts.loginServiceConfiguration.remove({ 
    service: "github" 
}); 

Accounts.loginServiceConfiguration.insert({ 
    service: "github", 
    clientId: "NUMBER", 
    secret: "SECRET_NUMBER" 
}); 

сервер/accounts.js

Accounts.onCreateUser(function (options, user) { 
    var accessToken = user.services.github.accessToken, 
     result, 
     profile; 
    result = Meteor.http.get("https://api.github.com/user", { 
     params: { 
      access_token: accessToken 
     } 
    }); 
    if (result.error) 
     throw result.error; 

    profile = _.pick(result.data, 
     "login", 
     "name", 
     "avatar_url", 
     "url", 
     "company", 
     "blog", 
     "location", 
     "email", 
     "bio", 
     "html_url"); 

    user.profile = profile; 

    return user; 
}); 

ответ

2

Последний API-интерфейс github требует заголовка HTTP-пользователя HTTP в каждом запросе. Просто включите его, как показано ниже.

result = Meteor.http.get("https://api.github.com/user", { 
    headers: {"User-Agent": "Meteor/1.0"}, 
    params: { 
    access_token: accessToken 
    } 
}); 
+0

Это работает отлично. Благодарю вас @ pallavi-anderson :) –

0

Если вы Арент увидеть что-нибудь рендеринг на странице на все ...

в клиентском/index.js попробуйте добавить

if (Meteor.isClient) { 
    Meteor.Router.add({ 
     '/': 'index' 
    }); 
} 

Im новый для метеора, но я думаю, что когда вы положили что-то в структуре/client/directory, которую вы должны направить на него.

я мог бы быть неправильно, но вы также можете просто попытаться поместить все в корневой папке и обертывание на стороне клиента материал с

if(Meteor.isClient) 

и сервера материала с

if(Meteor.isServer) 

Я не могу действительно сказать, если вы ничего не говорите на странице, это рендеринг вообще или только после входа в систему.

+0

Метеор автоматически загрузит index.js в «клиентский режим». Решение от @ pallavi-anderson работает как шарм –

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