小编kil*_*ahn的帖子

具有不同用户类型的 Firebase 身份验证

我正在做一些我有两个应用程序的事情 - 一个用于“请求者”用户,一个用于“响应者”用户,我目前正在使用 Firebase 进行身份验证。用户使用电子邮件/密码组合登录,这是问题的根源:

问题在于用户冲突 - 因为 auth 模块连接到 Firebase 控制台中的单个项目中,响应者可以在技术上登录请求者应用程序,反之亦然,这会导致问题,因为后端会关闭 - API 不允许他们访问,因为数据库在表中找不到他们的数据,并且应用程序的行为不规律(阅读:崩溃)。

我知道有类似的问题(Android - Firebase - 不同类型的用户登录),但我真正想问的是是否可以通过某种方式避免这种令人讨厌的情况。想到的一些选项是:

  1. 在数据库中进行手动检查,如果用户类型不正确,则将用户注销 -可以完成,但很乏味,并且会消耗数据/时间。
  2. 仅针对每种用户类型在 Firebase 中创建不同的项目 -这效率低下 - 虽然我使用 Firebase 进行身份验证,但我使用 Mongo 进行存储,所以这并不重要,但是如果/当我切换到 Firebase 进行存储时,那么我的服务器代码会变得复杂,由于必须分别访问不同的 DB 来访问请求者和响应者数据,因此速度缓慢且混乱
  3. 推出我自己的身份验证 -感觉是个坏主意,但它有助于解决眼前的问题,同时打开不同的蠕虫罐,因为我还需要实施 Firebase Cloud Messaging
  4. 切换到另一个身份验证提供商 -我在这里接受建议

我还预计响应者可以创建一个帐户并使用请求者应用程序,在这种情况下发生冲突并需要解决 - 我可以禁止响应者使用相同的电子邮件 ID 作为请求者登录,但是可能无法适应用户可能(并且将)希望对所有内容都使用一个电子邮件 ID 的现实世界场景。

任何人都可以帮助我采取正确的方法和/或任何提示/解决方案来解决这个问题吗?

----- 2017 年 12 月 14 日编辑 --------

我还在同一个项目下列出了两个应用程序(附上截图),所以我的下一个问题是,当请求者用户尝试登录/注册为响应者时,是否会发生冲突,反之亦然?

一个 Firebase 项目中两个应用的屏幕截图

android firebase-authentication

8
推荐指数
1
解决办法
7802
查看次数

Zappa /异步AWS Lambda函数在30秒内超时

我有一个Python 3.6 -使用部署到AWS LAMBDA瓶应用扎帕,其中我有使用@task定义的异步任务执行功能所讨论这里

但是,我发现函数调用仍然在30秒后超时,而AWS Lambda对非API调用强制执行的5分钟超时。我什至在Lambda设置中检查了超时,并将其设置为5分钟。

我发现此问题的方式是lambda的调试输出开始无请求重复的情况-发生这种情况是因为错误或超时(根据AWS Lambda文档),又两次调用了lamba。

谁能帮助我解决这个问题?

[编辑:lambda函数也不是任何VPC的一部分,并且设置为可从Internet访问。]

这是下面的日志。基本上,倒计时是一个20秒的睡眠计时器,然后是@task调用application.reviv_assign_responder,但正如我们所见,“ NEAREST RESPONDER”没有溢出,并且倒计时再次开始,表明该功能已计时并被(AWS')设计再次调用。

Log output in Pastebin : https://pastebin.com/VEbdCALg

Second incident - https://pastebin.com/ScNhbMcn
Run Code Online (Sandbox Code Playgroud)

正如我们在第二个日志中看到的那样,它清楚地指出:

[1515842321866] wait_one_and_notify:30:26 [1515842322867] wait_one_and_notify:30:27 [1515842323865] wait_one_and_notify:30:28 [1515842324865] 2018-01-13T11:18:44.865Z 72a8d34a-f853-11e7-ac2f-out12bd3d后30.03秒

flask python-3.x zappa aws-lambda

5
推荐指数
2
解决办法
1524
查看次数

AES会话密钥的RSA解密失败,出现'AttributeError:'bytes'对象没有属性'n'

我正在使用Python 3.6上的PyCryptodome实现公钥加密.当我尝试创建对称加密密钥并加密/解密变量时,一切正常.但是,在我介绍RSA(和PKCS1_OAEP)的那一刻,它一切顺利 - session_key加密很好但是当我尝试解密它时,我收到以下错误:

Traceback (most recent call last):
  File "enctest.py", line 109, in <module>
    deckey = decrypt_val(enckey)
  File "enctest.py", line 77, in decrypt_val
    session_key = cipher.decrypt(ciphertext)
  File "/usr/lib/python3.6/site-packages/Crypto/Cipher/PKCS1_OAEP.py", line 187, in decrypt
    modBits = Crypto.Util.number.size(self._key.n)
AttributeError: 'bytes' object has no attribute 'n'
Run Code Online (Sandbox Code Playgroud)

我的代码如下.任何人都可以看看,告诉我我做错了什么?

from Crypto.Cipher import AES, PKCS1_OAEP
from Crypto.PublicKey import RSA
from Crypto import Random
from Crypto.Random import get_random_bytes

random_generator = Random.new().read
keys = RSA.generate(1024, random_generator)
pubkey = keys.publickey()
privkey = keys.exportKey()
pubcipher = PKCS1_OAEP.new(pubkey) # ciphertext …
Run Code Online (Sandbox Code Playgroud)

python encryption cryptography python-3.x pycryptodome

4
推荐指数
1
解决办法
3100
查看次数

在前台服务中实现 Room 时的 ViewModel

我目前有一个应用程序,其中包含用于所有服务器/API 交互的 ForegroundService 和用于本地持久性的 Room 数据库。我一直在尝试实现 AndroidViewModel 来帮助数据持久化和快速 UI 刷新。

然而,根据文档,ViewModels 不能在 Services 中实现,到目前为止,我已经使用 Service 在本地更新信息并使用 LocalBroadcasts 通知组件(这是我想使用 ViewModels 和 Observers 消除的)。

我需要让服务运行,因为应用程序需要在后台继续运行(它是一个关键任务应用程序,应用程序关闭意味着用户将无法提供关键服务),并定期更新某些信息(附近的请求等)。

所以要问核心问题——

  1. 如何将服务与 ViewModel 分开,如果服务具有来自服务器的最新同步数据,如何更新 ViewModel 中的(可变)LiveData 列表?
  2. 这篇文章对 SO 问题的回答 说最好将 ViewModel 与存储库分开,而另一篇文章则给出了在 ViewModel 中包含 Room 数据库的示例。哪个是更好的选择?

我的一些ViewModel代码如下:

 public class HouseCallViewModel extends AndroidViewModel {

        private String TAG = HouseCallViewModel.class.getSimpleName();

        private MutableLiveData<List<HouseCall>> housecallList;
        private MutableLiveData<List<HouseCall>> openHousecalls, confirmedHousecalls, closedHousecalls, missedHousecalls, userCancelledHousecalls, respCancelledHousecalls;
        private MutableLiveData<List<Incident>> incidentList, openIncidents;
        private MutableLiveData<List<Incident>> closedIncidents, usercancelIncidents, respcancelIncidents;
        RevivDatabase database; …
Run Code Online (Sandbox Code Playgroud)

android mvvm android-service android-viewmodel

4
推荐指数
1
解决办法
2970
查看次数

在Android中为BottomAppBar实现app:hideOnScroll

我有一个应用程序,其中包含一个 Activity,多个 Fragments 模型,其中多个 Fragment 有一个 RecyclerView 来显示带有内容的卡片。我还实现了 Material Design 2.0 中的 BottomAppBar,一切都很好,除非 AppBar 阻止了 RecyclerView 中的最后一个 CardView。

在布局方面,我在一个 Fragment 内的 ConstraintLayout 中有一个 RecyclerView,它位于主要活动的 FrameLayout 中。

文档显示,要在 Scroll 上隐藏 BottomAppBar,我们需要在 NestedScrollView 中实现 RecyclerView。这里有一个关于 SO 的问题,其中的答案也说明了相同,但似乎没有实际的文档或示例来演示如何做到一点,除了这篇关于 Medium 的文章,它在 Activity 中使用了 NestedScrollView直接,持有一个 CoordinatorLayout 持有一个 ConstraintLayout。

注意:我认为它也适用于魔法,因为在我的片段中复制布局在我的应用程序中根本没有任何影响。

我如何在这里使用 NestedScrollView?

PS:我需要有 TextView,因为我将 RecyclerView 设置为 VISIBILITY.GONE 并在没有数据可显示时将 TextView 设置为 VISIBLE。

片段布局

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/constraintLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="in.domain.APPNAME.Fragments.FragmentList">


    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerViewIncident"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:paddingBottom="30dp"
        android:visibility="visible"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent" …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-recyclerview android-nestedscrollview android-bottomappbar

3
推荐指数
1
解决办法
1309
查看次数

使用 Zappa 的新分支/阶段

我目前在 AWS Lambda 上使用 Zappa/Flask (Py 3.7) 有一个 API

我的 zappa_Settings.json 文件如下所示:

{
    "beta": {
        "app_function": "application.application",
        "profile_name": "changed",
        "project_name": "changed",
        "runtime": "python3.7",
        "s3_bucket": "zappa-<obscured>"
    }

}
Run Code Online (Sandbox Code Playgroud)

然而,我们现在正在开发一组新的功能,并且感觉表明我们有一个单独的分支或阶段,例如“测试”,我们在部署这些功能并评估成熟度之前将其推入实时环境。

问题是,尽我所能,我无法从控制台创建新阶段:

zappa init 
Run Code Online (Sandbox Code Playgroud)

崩溃与

click.exceptions.ClickException:该项目已经有一个 zappa_settings.json 文件!

zappa init stage2
Run Code Online (Sandbox Code Playgroud)

产生

用法:zappa [-h] [-v] [--color {auto,never,always}] {认证,部署,init,包,模板,调用,管理,回滚,计划,状态,尾部,取消部署,取消计划,更新,shell} ... zappa:错误:无法识别的参数:stage2

zappa deploy stage2
Run Code Online (Sandbox Code Playgroud)

输出

(botocore 1.12.86 (/home/user/Code/Python/project/lib/python3.6/site-packages), Requirement.parse('botocore<1.11.0,>=1.10.82'), {'boto3'})
Calling deploy for stage stage2..
Error: Please define stage 'stage2' in your Zappa settings.
Run Code Online (Sandbox Code Playgroud)

现在,如果我手动为阶段创建条目,则需要有一个 s3 存储桶用于部署。重复使用与第一个实例相同的实例是否安全?我在这里要做什么来部署新阶段?

python-3.x zappa aws-lambda python-zappa

2
推荐指数
1
解决办法
922
查看次数

迭代字典并修改值

我试图通过递归迭代它的键来将字典中的特定日期时间值更改为字符串。

from copy import deepcopy
def datetoStr2(datadict):
if 'dict' in str(type(datadict)):
    newdict = dict()
    newdict.update(datadict)
    for key in datadict:
        if isinstance(datadict[key], dict):
            newdict[key] = datetoStr(datadict[key])
        if isinstance(datadict[key], list):
            mylist = datadict[key]
            for element in mylist:
                element = datetoStr(element)
        if isinstance(datadict[key], datetime):
        #newdict[key] = datadict[key].strftime('%Y-%m-%d %H:%M:%S.%f%z')
            newdict[key] = str(datadict[key])
    return newdict
else:
    return datadict
Run Code Online (Sandbox Code Playgroud)

然而,当我跑步时

some_dict = datetoStr(mydict)
Run Code Online (Sandbox Code Playgroud)

我仍然在原处保留日期时间对象。我究竟做错了什么?

编辑:更新了功能代码。

编写此函数是因为该字典是通过 Flask 的 jsonify 传递的,该 jsonify 目前会删除时区信息并将其替换为 GMT。(计划在下次更新中修复此问题)。

我已经更新了我的函数并记住了一些反馈,但我仍然无法产生结果。

我还添加了一些示例数据和我的输出。

结果:

代码中插入的快速打印告诉我日期时间仍然是日期时间,并且 TZinfo 被 jsonify 删除。

样本数据:

{'data': {'all': {'count': 2, …
Run Code Online (Sandbox Code Playgroud)

python python-3.x python-datetime

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