Angularjs 如何在angular full stack中强制登录?

Angularjs 如何在angular full stack中强制登录?,angularjs,login,stack,yeoman,Angularjs,Login,Stack,Yeoman,有没有办法强迫用户首先登录angular full stack yeoman生成的应用程序 我试图在app.js的运行部分添加以下代码,但没有成功 Auth.isLoggedIn(function(loggedIn) { console.log(loggedIn); if (!loggedIn) { console.log("redirecting"); // event.preventDefault(); $state.go('login'); } });

有没有办法强迫用户首先登录angular full stack yeoman生成的应用程序

我试图在app.js的运行部分添加以下代码,但没有成功

Auth.isLoggedIn(function(loggedIn) {
  console.log(loggedIn);
  if (!loggedIn) {
    console.log("redirecting");
    // event.preventDefault();
    $state.go('login');
  }
});
我在api index.js文件中找到了身份验证控件,但在/登录页中找不到任何控件


Thx

我没有像应该的那样使用谷歌! 要强制对状态进行身份验证,只需添加

验证:true

在状态(或我的情况下的所有状态)

中,如果没有关于您正在使用的路由器的更多代码或信息(generator angular fullstack支持默认的NgRouter和UIRouter),则很难给出完整的答案。根据您对问题的回答,我假设您拥有UI路由器,并且已经了解了如何在生成的fullstack代码中进行客户端身份验证。但是,您还需要实现一些类似于他们在“用户”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;
在上面的代码中(可以通过导航到服务器文件夹、api文件夹、用户文件夹并查看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并打开console,您将看到401或403错误,这取决于您是否以管理员用户身份登录和/或以管理员用户身份登录。

只需在main.js上粘贴authenticate:true即可

angular.module('testcesarApp')
 .config(function ($routeProvider) {
 $routeProvider
  .when('/', {
    templateUrl: 'app/main/main.html',
    controller: 'MainCtrl',
    authenticate:true
  });
 });

建议在需要登录的所有状态的父状态中创建
resolve
。儿童国家获胜;如果家长获胜,则无法访问;你好,克里斯。我的错误是期望从服务器端得到解决方案。在最后,我只在每个状态中添加了以下行(所以前面是)``authenticate:true``这确保了当您试图达到想要的状态时必须进行身份验证。不确定什么是最好的:将其添加到所有状态或所有api中的服务器端如果您想保护您的api端点,您可能应该将其添加到服务器端,您始终可以同时执行这两项操作。