【问题标题】:Authentication Error when using Flask to connect to ParseServer使用 Flask 连接 ParseServer 时出现身份验证错误
【发布时间】:2017-02-05 11:28:34
【问题描述】:

我想要实现的目标非常简单。

我想使用 Flask 创建一个通过 API 调用(特别是 ParseServer)连接到远程服务器的 Web 应用程序。 我正在使用第三方库来实现这一点,当我在独立脚本中运行我的代码时,一切都运行良好。但是当我将代码添加到 Flask 中时,我突然无法通过服务器进行身份验证

或者更准确地说,我在执行 API 调用时收到“未经授权”错误。

在我看来,在 Flask 中,API 库使用的注册方法不记得了。

我尝试了很多方法,将注册和初始化代码放在 Flask 的不同位置,但没有任何效果。

我在 Library 的 Github 上问了一个类似的问题,没有任何帮助。

所以我想我有两个问题可以帮助我解决这个问题

1) 我应该把注册方法和从这个库中导入的文件放在哪里? &

2) 我可以做些什么来具体识别问题,例如。准确地知道出了什么问题?

这里有一些代码

Flask 代码在这里

@app.route('/parseinsert')
def run_parse_db_insert():
    """The method for testing implementation and design of the Parse Db
    """
    pc = ParseCommunication()
    print(pc.get_all_names_rating_table())
    return 'done'

ParseCommunication 是我处理 Parse 的类。如果我从该脚本运行 ParseCommunication,并在 ma​​in 部分中使用与上面相同的代码,则一切正常。

我使用来自 Google App Engine 的 dev_appserver.py 运行 Flask 应用程序。

我的文件夹结构

/parseTest
  /aplication
   views.py
  app.yaml
  run.py

我的 run.py 代码

import os
import sys
sys.path.insert(1, os.path.join(os.path.abspath('.'), 'lib'))
sys.path.insert(1, os.path.join(os.path.abspath('.'), 'application'))
import aplication

让我知道我还能提供什么帮助。

提前谢谢你

编辑:

请求的堆栈跟踪。 它主要与图书馆有关(据我所知?)

ERROR    2016-09-28 06:45:50,271 app.py:1587] Exception on /parseinsert [GET]
Traceback (most recent call last):
  File "/home/theshade/Devel/ParseBabynames/parseTest/lib/flask/app.py", line 1988, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/theshade/Devel/ParseBabynames/parseTest/lib/flask/app.py", line 1641, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/theshade/Devel/ParseBabynames/parseTest/lib/flask/app.py", line 1544, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/theshade/Devel/ParseBabynames/parseTest/lib/flask/app.py", line 1639, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/theshade/Devel/ParseBabynames/parseTest/lib/flask/app.py", line 1625, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/theshade/Devel/ParseBabynames/parseTest/aplication/views.py", line 34, in run_parse_db_insert
    name = pc.get_user('testuser1')
  File "/home/theshade/Devel/ParseBabynames/parseTest/aplication/parseCommunication.py", line 260, in get_user
    return User.Query.get(username=uname)
  File "/home/theshade/Devel/ParseBabynames/parseTest/lib/parse_rest/query.py", line 58, in get
    return self.filter(**kw).get()
  File "/home/theshade/Devel/ParseBabynames/parseTest/lib/parse_rest/query.py", line 150, in get
    results = self._fetch()
  File "/home/theshade/Devel/ParseBabynames/parseTest/lib/parse_rest/query.py", line 117, in _fetch
    return self._manager._fetch(**options)
  File "/home/theshade/Devel/ParseBabynames/parseTest/lib/parse_rest/query.py", line 41, in _fetch
    return [klass(**it) for it in klass.GET(uri, **kw).get('results')]
  File "/home/theshade/Devel/ParseBabynames/parseTest/lib/parse_rest/connection.py", line 108, in GET
    return cls.execute(uri, 'GET', **kw)
  File "/home/theshade/Devel/ParseBabynames/parseTest/lib/parse_rest/connection.py", line 102, in execute
    raise exc(e.read())
ResourceRequestLoginRequired: {"error":"unauthorized"}

【问题讨论】:

  • 你能提供错误的堆栈跟踪吗?您可以为每个函数添加日志记录以查看它有多远吗?您已经互换了拼写:“应用程序”与“应用程序”。检查一下。
  • @GAEfan 感谢您的回复。我将堆栈跟踪编辑到问题中。据我所知,这主要与我正在使用的 Python SDK/API 库有关。但也许你可以比我读得更多。再次感谢您的帮助
  • 再次回到“应用”和“应用”的互换

标签: python google-app-engine parse-platform flask parse-server


【解决方案1】:

解析需要键和环境变量。检查这一行:

API_ROOT = os.environ.get('PARSE_API_ROOT') or 'https://api.parse.com/1'

您的错误在第 102 行:

https://github.com/milesrichardson/ParsePy/blob/master/parse_rest/connection.py

在解析之前,需要先注册:

from parse_rest.connection import register

APPLICATION_ID = '...'
REST_API_KEY = '...'
MASTER_KEY = '...'

register(APPLICATION_ID, REST_API_KEY, master_key=MASTER_KEY)

【讨论】:

  • 所以在你回答之前,我发现你发布的那一行在 Flask 的 parselibrary 的代码中是不同的,因为没有 or 部分。因此,在我直接从 github 更新库后,它正在开发一个新项目,而不是旧项目。原来,在旧项目中,我正在导入一个 ModelClass,它也使用库中的 Users 类,然后再导入包含注册的 ParseCommunication 类。一旦我打开它,它就可以工作。感谢您的帮助和努力@GAEEfan
  • 我正在尝试一些非常相似的东西。我得到了相同的跟踪,但我怀疑这个问题是 rest_key。我能够找到的是开源解析服务器不使用 REST_API_KEY。你找到工作了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-24
  • 2020-07-10
  • 2020-09-18
  • 2017-06-18
  • 2013-03-12
  • 1970-01-01
相关资源
最近更新 更多