Войти через facebook в приложении angular с бэкэндом loopback

Я делаю угловое приложение с бэкэндом strongloop loopback.

Также я интегрирую сторонний логин через facebook, используя модуль loopback-паспорт.

все было хорошо в loopback-example-паспорте, и все было хорошо в моем приложении прямо перед моментом перенаправления в мое приложение. Пользователь и токен доступа созданы.

код:

app.get('/auth/login', ensureLoggedIn('/#login'), function(req, res, next) {
    console.log('LOOGED IN!!');
console.log(req.user);

  res.redirect('/#auth/login');
});

работает отлично. Но я не могу понять. как предоставить аутентифицированное состояние моему угловому приложению.

Я попытался заставить контроллер маршрутизировать '/ # 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 аутентифицироваться в loopback, хотя я знаю токен доступа и userId

Есть ли у кого-нибудь идеи, как это сделать?


person chilicoder    schedule 13.06.2014    source источник


Ответы (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');
});

Проблема в том, что петлевой паспорт подписывает cookie:

         res.cookie('access-token', info.accessToken.id, { signed: true,
           maxAge: info.accessToken.ttl });

В строке это выглядит примерно так: "s: .eBvo8bpo9Q9wnNrPjjlG% 2FAcYqWkxEgNFqn% 2FO54rdGwY"

Но loopback-angular просто копирует токен доступа в header.authorization, поэтому нам нужно поместить туда простой файл cookie.

person chilicoder    schedule 14.06.2014
comment
Не мог бы кто-нибудь поделиться для этого образцом приложения? Спасибо! - person imesh; 12.04.2017