2016-02-06 13 views
0

Я реализовал маршрутизацию на стороне клиента, используя «Угловой UI-маршрутизатор». Я использую паспортную стратегию facebook на стороне сервера, чтобы обрабатывать аутентификацию на основе facebook.Войти через свой файл по таможни facebook strategy with urular ui router

У меня есть свои угловые маршруты следующим образом:

angular.module('homepage'). 
config(function($stateProvider, $urlRouterProvider) { 

    $urlRouterProvider.otherwise('/'); 

    $stateProvider 

     // INDEX STATES ======================================== 
     .state('index', { 
      url: '/', 
      templateUrl: '../../html/partials/partial-index.html' 
     }) 

     // HOME PAGE AND MULTIPLE NAMED VIEWS ================================= 
     .state('home', { 
      url: '/home', 
      templateUrl: '../../html/partials/partial-home.html' 
     }); 

}); 

Теперь я инициируют проверку подлинности по щелчку по следующей ссылке:

<a class="clickable" href="/auth/facebook">Log In</a> 

Ниже приведены мои на стороне сервера маршруты:

// route for facebook authentication and login 
app.get('/auth/facebook', 
    passport.authenticate('facebook', { 
     scope : 'email' 
    })); 

// handle the callback after facebook has authenticated the user 
app.get('/auth/facebook/callback', 
    passport.authenticate('facebook', { 
     successRedirect : '/success', 
     failureRedirect : '/login' 
    })); 

app.get('/success', isLoggedIn, function(req, res) { 
    // client side redirection without passing user info 
    res.redirect('/#/home'); 
}); 

При успешном проверке подлинности моя страница перезагружается и загружает localhost: 8888/#/home 'и загружает' home 'r . Но проблема в том, что после перенаправления я не получил никакой информации о пользователе на стороне клиента.

В идеале я хотел бы сделать что-то выглядит следующим образом:

app.get('/success', isLoggedIn, function(req, res) { 
    // what i would like to do ideally 
    res.json({ 
     path: '/#/home', 
     user : req.user // get the user out of session and pass to template 
    }); 
}); 

Но я не знаю, как передать эту информацию, чтобы angularjs текущего контекста страницы из nodejs маршрутов. Как я могу это реализовать.

Каков хороший подход к аутентификации с помощью стратегии facebook, а затем перенаправление углового маршрута при передаче пользовательской информации в угловой.

ответ

0

Вы должны написать собственный обработчик для получения паспорта при использовании стратегии. Например:

passport.use(new FacebookStrategy({ 
    clientID: FACEBOOK_APP_ID, 
    clientSecret: FACEBOOK_APP_SECRET, 
    callbackURL: "http://localhost:3000/auth/facebook/callback" 
    }, 
    function(accessToken, refreshToken, profile, cb) { 
    User.findOrCreate({ facebookId: profile.id }, function (err, user) { 
     return cb(err, user); 
    }); 
    } 
)); 

Вы писали, что?

Не забывайте о пользователе сериализации:

// used to serialize the user for the session 
passport.serializeUser(function(user, done) { 
    done(null, user.id); 
}); 

// used to deserialize the user 
passport.deserializeUser(function(id, done) { 
    User.findById(id, function(err, user) { 
     done(err, user); 
    }); 
}); 
+0

Как это относится к моему вопросу. – jsbisht

+0

Если я правильно понимаю, в 'req.user' нет информации о пользователе, верно? – Festo

+0

Мой плохой, пользователь не получил, что я упомянул для angularjs. Я могу сделать аутентификацию с паспортом и получить информацию о пользователе в nodejs. – jsbisht