小编Erd*_*rds的帖子

CORS - Ajax错误函数将返回401的API请求的错误代码报告为0

背景

当身份验证(JWT)成功时,我在本地开发环境中使用CORS.我的客户端页面运行localhost并调用api.mycompany.com获取数据.我的api项目检查有效的JWT,如果通过,则返回内容.我花了一段时间才到这里,但这一切都很好.

如果我没有发送有效的JWT,则api会正确响应401(在Fiddler中检查),但客户端上的错误函数回调报告错误代码为0且状态为"错误".

我希望ajax回调函数检查错误的状态代码,如果是401,请检查标题名为location的标题(将包含uri到身份验证服务).

建立

  • (API项目)在本地IIS Express上运行MVC4项目的Visual Studio 2012实例

    • 本地主机文件将127.0.0.1映射到api.mycompany.com
    • 将项目 - >属性 - > Web设置为IIS Express
      • 使用本地IIS Express(已选中)
      • 项目网址: http://localhost:8080
      • 创建虚拟目录
      • 覆盖应用程序根URL(已选中)
      • 覆盖应用程序根URL: http://api.mycompany.com:8080
    • 在站点下的applicationhost.config中:

      <site name="StuffManagerAPI" id="1">
        <application path="/" applicationPool="Clr4IntegratedAppPool">
          <virtualDirectory path="/" physicalPath="C:\Users\me\Documents\Visual Studio 2012\Projects\StuffManagerAPI\StuffManagerAPI" />
        </application>
        <bindings>
          <binding protocol="http" bindingInformation="*:8080:localhost" />
          <binding protocol="http" bindingInformation="*:8080:api.mycompany.com" />
        </bindings>
      </site>
      
      Run Code Online (Sandbox Code Playgroud)
  • (客户端项目)将Visual Studio实例与ASP.net空Web应用程序分开

    • 将项目 - >属性 - > Web设置为IIS Express
      • 使用本地IIS Express(已选中)
      • 项目网址: http://localhost:22628
      • 创建虚拟目录
  • 使用Google Chrome作为测试客户端

  • 使用Fiddler查看流量

码

我认为这些应该是我的概念验证中的重要部分.再次,CORS预检和数据检索都可以正常工作.这只是未经授权的案例无效.如果您还有其他需要,请告诉我.谢谢您的帮助.

API项目

授权标题处理程序

using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using …
Run Code Online (Sandbox Code Playgroud)

ajax jquery cors

9
推荐指数
1
解决办法
4606
查看次数

使用RoboGuice 2.0的Android应用程序 - 如何使用Application上下文注入Singleton

我有一个GameStateManager单例,我想让我的所有活动都可用.特别是我希望它使用Application Context而不是单独的Activity Context来监听使用EventManager触发的事件.

GameStateManager标有单例注释

我试着在Application.OnCreate期间注入GameStateManager(抱歉,从内存中输入以下代码片段,没有复制和粘贴,所以可能不正确)

public void OnCreate(){
    GameStateManager gameStateManager = RoboGuice.InjectMembers(this.getApplicationContext(), new GameStateManager())

}
Run Code Online (Sandbox Code Playgroud)

我认为GameStateManager的实例将使用应用程序上下文构造,因为它被注释为单例,因此稍后可以使用应用程序上下文.我注意到的是,当我将GameStateManager注入一个活动时,我实际上得到了一个与活动上下文相关联的新单例.所以本质上我有2个单身:)

关于如何拥有一个连接到Application上下文的真正"单例"的任何想法?

谢谢!

android dependency-injection guice roboguice

6
推荐指数
1
解决办法
2363
查看次数

UnitTesting GAE中的webapp.RequestHandler - Python

我正在努力研究如何使用Google App Engine(Python)为TDD设置我的环境.(我也是Python的新手).我的环境如下:

  • Google App Engine 1.5.0
  • IntelliJ 10.2
  • IntelliJ设置将Python 2.5.4用于此项目

我使用IntelliJ和Python插件,因此运行unittests就像点击ctrl-shft-f10一样简单.

我还阅读了有关testbed的文档,并成功测试了数据存储区和内存缓存.但是,我遇到的问题是如何对RequestHandlers进行单元测试.我已经在Google上扫描了很多文章,其中大多数似乎都是将gaetestbed与gae合并为测试平台.

在下面的代码示例中,我想知道如何编写单元测试(可在intellij中运行),该测试测试对'/'的调用返回 - >主页

from google.appengine.ext import webapp
import wsgiref.handlers

class MainHandler(webapp.RequestHandler):

    def get(self):
        self.response.out.write('Home Page')

paths = [
          ('/', MainHandler)
        ]

application = webapp.WSGIApplication(paths, debug=True)

def main():
    wsgiref.handlers.CGIHandler().run(application)

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

根据Nick Johnson在下面的回答,我添加了一个名为test的新文件夹,并在该文件夹中添加了一个名为unit_test.py的文件.对于该文件,我添加了以下代码(修改自Kris的答案如下):

from StringIO import StringIO
from main import MainHandler
import unittest
from google.appengine.ext import webapp

class MyTestCase(unittest.TestCase):
    def test_get(self):
        request = webapp.Request({
            "wsgi.input": StringIO(),
            "CONTENT_LENGTH": 0,
            "METHOD": "GET",
                            "PATH_INFO": "/",
        })
        response = …
Run Code Online (Sandbox Code Playgroud)

python google-app-engine unit-testing

5
推荐指数
1
解决办法
946
查看次数

谷歌帐户的Android身份验证已传递到Google App Engine

在深入研究实现这个特定设计的细节之前,我想要一些关于我是否正确接近它的建议/验证.我有Android的初学者知识,Python,GAE和OpenId的高级初学者.

环境

  • Android应用程序
  • 在Google App Engine上使用Python构建的Web服务
  • 使用Google帐户的用户

脚本

我想在我的Android应用程序中启用登录功能,而无需在GAE中编写自己的身份验证系统.在应用程序内,用户应该能够以访客身份进行游戏而无法保存高分.如果用户希望保存他的高分,他将在Android设备上对他的Google帐户进行身份验证.在游戏结束时,经过身份验证的用户高分将通过Google App Engine上的游戏网络服务保存(与他的Google帐户相关联).用户还应该能够注销并将设备交给朋友,该朋友也可以登录,玩游戏并保存与她的Google帐户相关的高分.

设计

  1. 在Android应用程序中,只要用户希望登录,就可以使用OpenId进行身份验证(使用Nick在此处发布的内容.
  2. 从返回的cookie中获取OpenId标记,并将其与当前用户关联.
  3. 对GAE服务进行Web服务调用,将令牌添加为cookie并包含高分
  4. Web服务将验证令牌是否有效
  5. Web服务将确定与令牌关联的唯一Google帐户ID(不知道如何执行此操作,但假设应该有一种方法可以执行此操作)并在交叉引用表中查找该唯一ID以查找用户-game id(以前在帐户设置期间创建)
  6. 保存与游戏内ID相关联的高分.
  7. 允许注销,以便其他用户可以使用他们的Google帐户登录游戏并重复上述过程

谢谢您的帮助

google-app-engine android google-openid

5
推荐指数
1
解决办法
2828
查看次数