2015-09-27 2 views
-1

Есть ли способ заставить пользователя войти в систему первым в приложении, создаваемом угловой полной сумкой?Как заставить логин в угловой полный стек?

Я пытался добавить следующий код в разбеге части app.js, но не был успешным

Auth.isLoggedIn(function(loggedIn) { 
    console.log(loggedIn); 
    if (!loggedIn) { 
    console.log("redirecting"); 
    // event.preventDefault(); 
    $state.go('login'); 
    } 
}); 

Я нашел контроля подлинности в API index.js файлов, но ни для страницы/посадки ...

Thx

+0

предлагают создать 'resolve' в родительском состоянии всех государств, которые необходимо авторизироваться. Детские государства выиграли; t были доступны, если родитель выиграл; t разрешить – charlietfl

ответ

1

Я не использовал Google, как я должен! Для принудительной аутентификации для государства, просто добавьте authenticate: true в состоянии (или все государства в моем случае)

1

Без дополнительного кода или информации, на которой маршрутизатор вы используете (генератор-угловой-fullstack поддерживает по умолчанию NgRouter и UIRouter) трудно дать полный ответ. Отвечая на ваш вопрос, я предполагаю, что у вас есть UI-маршрутизатор, и выяснили, как выполнять аутентификацию на стороне клиента в сгенерированном полноэкранном коде. Однако вам также потребуется реализовать что-то похожее на то, что они сделали в api своих пользователей, чтобы защитить конечные точки api на стороне сервера и вернуть ошибку 401/403.

'use strict'; 

var express = require('express'); 
var controller = require('./user.controller'); 
var config = require('../../config/environment'); 
var auth = require('../../auth/auth.service'); 

var router = express.Router(); 

router.get('/', auth.hasRole('admin'), controller.index); 
router.delete('/:id', auth.hasRole('admin'), controller.destroy); 
router.get('/me', auth.isAuthenticated(), controller.me); 
router.put('/:id/password', auth.isAuthenticated(),   controller.changePassword); 
router.get('/:id', auth.isAuthenticated(), controller.show); 
router.post('/', controller.create); 

module.exports = router; 

В приведенном выше коде (который можно найти, перейдя в папку сервера, затем папку апи, затем папку пользователя и глядя на index.js) вы увидите, что они называют несколько функций ,

Они вызывают auth.hasRole ('admin') и auth.isAuthenticated().

Это функции, которые можно найти в службе auth/role на стороне сервера в папке auth и в файле auth.service.js.

function hasRole(roleRequired) { 
if (!roleRequired) throw new Error('Required role needs to be set'); 

return compose() 
.use(isAuthenticated()) 
.use(function meetsRequirements(req, res, next) { 
    if (config.userRoles.indexOf(req.user.role) >= config.userRoles.indexOf(roleRequired)) { 
    next(); 
    } 
    else { 
    res.status(403).send('Forbidden'); 
    } 
}); 
} 

Я думаю, что важно понимать, как это работает на стороне сервера. Таким образом, если вы перейдете на localhost: 9000/admin и откройте консоль, вы увидите, что есть ошибка 401 или 403 в зависимости от того, вошли ли вы в систему и/или вошли в систему как пользователь admin.

+0

Привет Крис. Моя ошибка заключалась в том, чтобы ожидать решения со стороны сервера. В конце я добавляю только следующую строку в каждом состоянии (так лицевая сторона) '' ' authenticate: true ' '' Это гарантирует, что вы должны пройти аутентификацию, когда пытаетесь достичь желаемого состояния. Не уверен, что лучше: добавьте это ко всем состояниям или на сервер во всем API –

+1

, если вы хотите защитить свои конечные точки api, вероятно, вы должны добавить его на серверную сторону, вы всегда можете обойти оба. –

0

Просто вставьте аутентифицировать: правда на main.js

angular.module('testcesarApp') 
.config(function ($routeProvider) { 
$routeProvider 
    .when('/', { 
    templateUrl: 'app/main/main.html', 
    controller: 'MainCtrl', 
    authenticate:true 
    }); 
}); 
Смежные вопросы