如何使用stormpath使angularjs调用nodejs api和auth
Posted
技术标签:
【中文标题】如何使用stormpath使angularjs调用nodejs api和auth【英文标题】:how to make angularjs call to nodejs api and auth with stormpath 【发布时间】:2015-03-03 09:00:58 【问题描述】:以下代码从 angularjs 开始,然后通过节点进行路由,然后应该进行外部 api 调用。发生了什么,stormpath 正在拦截呼叫并尝试对其进行身份验证(提供登录屏幕......我检查了 res.data)。自从我最初必须登录以来,我认为该应用程序已经很好了。我没有在 ui-router 中定义路由,因为我希望节点来处理它而不是有角度的。所以,我的问题是如何配置不同的层来处理调用。
角度 -> 节点/风暴路径 -> 外部 api
节点路由:
app.use('/api/v1/accounts/:search', stormpath.groupsRequired(['dataentry']), apiAccounts.findAll);
风暴路径设置:
app.use(stormpath.init(app,
apiKeyFile: config.stormpathapi.apiKeyFile,
application: config.stormpathapi.application,
secretKey: config.stormpathapi.secretKey,
sessionDuration: 1000 * 60 * 30,
enableAutoLogin: true,
enableUsername: true
));
角码:
$scope.getCustomers = function(chars)
var customers = [],
url = 'api/v1/accounts/' + encodeURIComponent(chars) + '/';
console.log('getCustomers: ' + url);
try
//return $http.jsonp(url)
return $http.get(url)
.then(function(res)
if(angular.isArray(res.data))
customers = res.data;
return customers;
, function (error)
console.log('Unable to load the customers: ' + error)
);
catch(e)
console.log("error searching comapny: " + e);
网址格式正确。如果我在新的浏览器窗口中拨打电话,它会按预期工作(并通过stormpath api对我进行身份验证。我想要这个功能,这样任何人都可以在没有登录应用程序的情况下使用该api。
网址格式:
http://localhost:3000/api/v1/accounts/ap/
res.data 包含stormpath html:
<!DOCTYPE html><!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--><html lang="en" class="no-js"><!--<![endif]--><head><meta charset="utf- 8"><title>Log In</title><meta content="Log into your account!" name="description"><meta content="width=device-width" name="viewport"><link href="//fonts.googleapis.com/css? family=Open+Sans:300italic,300,400italic,400,600italic,600,700italic,700,800italic,800" rel="stylesheet" type="text/css"><link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet"><style>html,
body
height: 100%;
.....
<body class="login"><div class="container custom-container"><div class="va-wrapper"><div class="view login-view container"><div class="box row"><div class="email-password-area col-xs-12 large col-sm-12"><div class="header"><span>Log In or <a href="/register">Create Account</a>
.....
谢谢!
【问题讨论】:
如果您要投反对票,请留下建设性的评论为什么。它将帮助我发布更好的问题。 您好,Will,我在 Stormpath 工作,应该能够提供帮助。我相信您在问“如何使用 STormpath 保护我的 API”?如果是这样,它应该已经通过使用stormpath.groupsRequired
中间件来做到这一点。您可以使用 CURL 对您的 API 发出请求来检查。
你好@robertjd!我更新了问题。我已经获得了stormpath“保护”......我遇到的问题是在登录int app(通过stormpath)并拨打电话后,再次提示登录,但这是一个后端调用。当我检查 res.data 时,我看到了 Stormpath 登录的 html。
【参考方案1】:
我认为 Stormpath 中间件正在拦截 API 调用并试图呈现登录页面。我认为解决方案是将 stormpath.LoginRequired
中间件放在为您的 Angular 应用程序提供服务的路由上,这将强制他们进入登录页面,并且在他们登录后应该有一个会话 cookie,用于 API 调用。
【讨论】:
谢谢@robertjd!我将 loginRequired 添加到包罗万象的路线 app.all('/*',stormpath.loginRequired, function(req, res, next) 并将 groupsRequired 留在实际路线上,因为其他一些路线会改变跨度>以上是关于如何使用stormpath使angularjs调用nodejs api和auth的主要内容,如果未能解决你的问题,请参考以下文章
如何使 ng-bind-html 编译 angularjs 代码
如何使用 ng-repeat 使 bxSlider 在 AngularJS 中工作?
如何使 AngularJS 路由与 index.html/#/myPage 一起使用,如 index.html#/myPage