Вход через facebook в приложение angular с бэкэндом обратной петли
Я создаю приложение angular с backback-сервером strongloop.
Также я включаю сторонний логин в facebook с помощью модуля loopback-passport.
все было в порядке в паспорте-пример-паспорт, и все хорошо в моем приложении прямо перед моментом перенаправления на мое приложение. Создан пользователь и токен.
код:
app.get('/auth/login', ensureLoggedIn('/#login'), function(req, res, next) {
console.log('LOOGED IN!!');
console.log(req.user);
res.redirect('/#auth/login');
});
работает отлично. Но я не понимаю. как предоставить аутентифицированное состояние моему приложению angular.
Я попытался сделать контроллер для маршрута '/# auth/login':
.controller('AuthCalbackCtrl', function($scope, $cookies, $location, AppAuth, $http, User, LoopBackAuth) {
//analogue of User.login responce interceptor
LoopBackAuth.currentUserId = $cookies['userId'] || null;
LoopBackAuth.accessTokenId = $cookies['access-token'] || '';
LoopBackAuth.rememberMe = false;
LoopBackAuth.save();
//asking for currentUser
User.getCurrent(function(user) {
console.log('ser.getCurrent ', user);
});
$location.path('/');
})
Этот код делает запрос GET/api/users/2, но получает ошибку 401.
Если я настроил файл /loopback/lob/models/user.js, установив разрешение:
principalType: ACL.ROLE,
// principalId: Role.OWNER,
principalId: Role.EVERYONE,
permission: ACL.ALLOW,
property: "findById"
Затем запрос GET/api/users/2 получает 200 и все в порядке.
Я немного смущен. Я не могу понять, как сделать аутентификацию моего приложения angular завершенным, хотя я знаю токен доступа и userId
Есть ли у кого-нибудь идеи, как это сделать?
Ответы
Ответ 1
Вот действительный код.
app.get('/auth/login', function(req, res, next) {
//workaround for loopback-password
//without this angular-loopback would make incorrect authorization header
res.cookie('access-token', req.signedCookies['access-token']);
res.cookie('userId', req.user.id);
res.redirect('/#auth/login');
});
Проблема в том, что loopback-паспорт подписывает файл cookie:
res.cookie('access-token', info.accessToken.id, { signed: true,
maxAge: info.accessToken.ttl });
В строке это выглядит примерно так: ".eBvo8bpo9Q9wnNrPjjlG% 2FAcYqWkxEgNFqn% 2FO54rdGwY"
Но loopback- angular просто копирует токен доступа в header.authorization, поэтому нам нужно добавить простой cookie.