在Google App Engine服务器中实施CORS

时间:2014-05-26 01:30:57

标签: javascript google-app-engine jquery-mobile cors

我在GAE上有一个应用,用于检查用户是否使用Google用户服务登录Google。如果用户未登录,则应该从Google重定向到登录页面。

以下是尝试执行此操作的代码:

class RegistrationHandler(webapp2.RequestHandler):
def post(self):
    user = users.get_current_user()
    if user:
        username = self.request.get(user.nickname())
        callback = self.request.get('callback')
        member = Member.get_by_id('username')
        if member:
            self.response.write("A member with that id already exists")
        else:
            m_username=self.request.get('username')
            m_name=self.request.get('name')
            member = Member(id=m_username, username=m_username, member_name=m_name)
            member.put()
        if callback:
            self.response.write(callback + '(' + member.toJSON() + ')')
        else:
            self.response.write(member.toJSON())
    else:
         self.redirect(users.create_login_url(self.request.uri))

但是,当我从我的jQuery Mobile应用程序发出请求时,收到错误消息:

XMLHttpRequest cannot load http://localhost:18090/. No 'Access-Control-Allow-Origin'    

header is present on the requested resource. Origin 'http://localhost:63343' is  

therefore not allowed access.

所以我做了一点研究,发现这是由CORS失败引起的。 所以我进一步挖掘并在this网站上找到了一些信息,说明要使用这段代码:

class CORSEnabledHandler(webapp.RequestHandler):
   def get(self):
     self.response.headers.add_header("Access-Control-Allow-Origin", "*")
     self.response.headers['Content-Type'] = 'text/csv'
     self.response.out.write(self.dump_csv())

在服务器上。 作为一个新手,我不确定如何实现这一点。javascript中的其他建议有点复杂。

1 个答案:

答案 0 :(得分:1)

如果网站概述足够,那么添加行

self.response.headers.add_header("Access-Control-Allow-Origin", "*")

在帖子处理程序内部和if user条件内。

当然,这需要与客户端的相应javascript一起完成。 http://www.html5rocks.com/en/tutorials/cors/