我正在做一些我有两个应用程序的事情 - 一个用于“请求者”用户,一个用于“响应者”用户,我目前正在使用 Firebase 进行身份验证。用户使用电子邮件/密码组合登录,这是问题的根源:
问题在于用户冲突 - 因为 auth 模块连接到 Firebase 控制台中的单个项目中,响应者可以在技术上登录请求者应用程序,反之亦然,这会导致问题,因为后端会关闭 - API 不允许他们访问,因为数据库在表中找不到他们的数据,并且应用程序的行为不规律(阅读:崩溃)。
我知道有类似的问题(Android - Firebase - 不同类型的用户登录),但我真正想问的是是否可以通过某种方式避免这种令人讨厌的情况。想到的一些选项是:
我还预计响应者可以创建一个帐户并使用请求者应用程序,在这种情况下发生冲突并需要解决 - 我可以禁止响应者使用相同的电子邮件 ID 作为请求者登录,但是可能无法适应用户可能(并且将)希望对所有内容都使用一个电子邮件 ID 的现实世界场景。
任何人都可以帮助我采取正确的方法和/或任何提示/解决方案来解决这个问题吗?
----- 2017 年 12 月 14 日编辑 --------
我还在同一个项目下列出了两个应用程序(附上截图),所以我的下一个问题是,当请求者用户尝试登录/注册为响应者时,是否会发生冲突,反之亦然?
我有一个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秒
我正在使用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) 我目前有一个应用程序,其中包含用于所有服务器/API 交互的 ForegroundService 和用于本地持久性的 Room 数据库。我一直在尝试实现 AndroidViewModel 来帮助数据持久化和快速 UI 刷新。
然而,根据文档,ViewModels 不能在 Services 中实现,到目前为止,我已经使用 Service 在本地更新信息并使用 LocalBroadcasts 通知组件(这是我想使用 ViewModels 和 Observers 消除的)。
我需要让服务运行,因为应用程序需要在后台继续运行(它是一个关键任务应用程序,应用程序关闭意味着用户将无法提供关键服务),并定期更新某些信息(附近的请求等)。
所以要问核心问题——
我的一些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) 我有一个应用程序,其中包含一个 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
我目前在 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 存储桶用于部署。重复使用与第一个实例相同的实例是否安全?我在这里要做什么来部署新阶段?
我试图通过递归迭代它的键来将字典中的特定日期时间值更改为字符串。
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-3.x ×4
android ×3
aws-lambda ×2
python ×2
zappa ×2
cryptography ×1
encryption ×1
flask ×1
mvvm ×1
pycryptodome ×1
python-zappa ×1