我知道最终它无法完成.
但是,有哪些选择:
a)限制人员创建多个账户的选项,
b)增加检测多个账户/人的机会
对于类似博客的Web服务?
(人们可以注册自己的博客)
更新:
我认为'限制选项'已得到很好的回答.(没有可靠的方法,但我们可以提高标准)
但是,我仍然想知道有哪些其他选项来检测多个帐户?
每次我的应用程序从App Store更新时,由于某种原因,少数用户会获得新的identifierForVendor.我的用户没有注册或登录.它们都是匿名的,因此我需要通过供应商ID将它们分开.
我认为在某些设备上可能没有足够的空间,导致应用程序被删除并重新安装,但事实并非如此,因为在上一次更新中,我的一个朋友有超过2GB的空闲空间.
我知道删除并重新安装应用程序的用户更改了identifierForVendor.但这不是这里的情况,因为应用程序刚刚更新.
问题是什么?奇怪的是,尚未发现开发团队设备.或者仍然有用户在无数的应用更新,操作系统更新等之后没有遇到此错误.这只发生在一小部分用户身上.所有用户都是iOS7 +,它适用于不同的设备型号和iOS版本.
我使用此代码获取其ID:
static let DeviceId = UIDevice.currentDevice().identifierForVendor.UUIDString
Run Code Online (Sandbox Code Playgroud)
然后我将它们保存到NSUserDefaults中:
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "User" + DeviceId)
NSUserDefaults.standardUserDefaults().synchronize()
Run Code Online (Sandbox Code Playgroud)
然后我会在每次新登录时检查用户是否存在:
static func doesUserExist() -> Bool {
var userDefaultValue: AnyObject? = NSUserDefaults.standardUserDefaults().valueForKey("User" + DeviceId)
if defaultValue == true {
println("Userdefaults already has this guy, moving on")
FirstTime = false
return true
} else {
println("First time in the app!")
FirstTime = true
return false
}
}
Run Code Online (Sandbox Code Playgroud)
如果用户确实存在,则启动登录过程.如果用户不存在,则向他们显示注册过程.我使用Parse.com作为后端,deviceID用作用户名.当少量用户遇到此错误时,我会看到一个新用户名和一个新帐户.
最新的App Engine SDK(1.2.1)具有API调用,用于根据用户帐户的电子邮件地址计算用户帐户的ID.(即使用户稍后更改了地址,ID仍保持不变.)有关信息的唯一,不透明用户ID,请参阅此问题.但是,我有这个API调用的问题.
user_id()适用于登录用户(即从users.get_current_user),但它返回None由users.User()构造函数创建的对象.**什么给出?
例如,使用优秀的App Engine控制台,此代码不起作用.
>>> import google.appengine.api.users
>>> me = google.appengine.api.users.get_current_user()
>>> me
users.User(email='jason.h.smith@gmail.com',_user_id='105261964646342707921')
>>> me.user_id()
'105261964646342707921'
>>> somebody = google.appengine.api.users.User('someone@gmail.com')
>>> somebody
users.User(email='someone@gmail.com')
>>>somebody.user_id()
>>> type(somebody.user_id())
<type 'NoneType'>
Run Code Online (Sandbox Code Playgroud)
我想要一种简单的方法将电子邮件地址转换为用户ID. 我怎样才能提前从Google强制提供此ID; 或者如果不可能,为什么不呢?
感谢Nick Johnson的回答.以下是他的解决方案:
>>> from google.appengine.ext import db
>>> from google.appengine.api import users
>>> class User(db.Model):
... user = db.UserProperty(required=True)
...
>>> def email_to_userid(address):
... """Return a stable user_id string based …Run Code Online (Sandbox Code Playgroud) 因此,我一直在观察Meteor的一个比较令人困惑的方面是每次刷新都会清除Sessions.既然它不是持久性存储,我会在哪里放置像userid这样的东西,或者人们在我的应用程序的状态机中?
这些场景的模式是什么?
session-state user-identification state-machine-workflow node.js meteor
以下行
Environment.UserName
Run Code Online (Sandbox Code Playgroud)
在Visual Studio的调试模式中,返回用户身份,就像我需要的那样.
然后,当我在IIS中设置我的站点并运行代码时,同一行返回该站点使用的应用程序池的名称.
如何让它仍然返回用户名?
有几种方法可以识别设备 - IMEI/IMSI/ESN,GoogleID,您自己的加密GUID,保存在私人商店等等.但是,只要人们每3-6个月切换一次设备,重要的是不要识别设备而是确切地说是用户.
我们知道Google使用唯一ID来识别允许在Google Play上购买的用户(电子邮件)等.此外,我们知道谷歌拒绝开发者访问此ID,保存并用于垃圾邮件等.实际上,现在我们可以使用客户经理来获取它,至少其中一个.至少我不知道如何区分哪个帐户处于活动状态并用于购买我的应用程序.
在Widows Phone中,我看到了一个明智的方法:系统为开发人员提供了一些来自用户帐户ID /电子邮件的哈希值.除了识别您的用户之外,您无法对其执行任何操作.正是我想要做的!即使有人会窃取这个身份证,他也不能将其用作电子邮件或其他任何东西.
所以我搜索类似的东西.我仍然没有找到关于如何安全地识别用户的明确信息.有很多帖子,很多意见,但仍然没有明确和可理解的方式.
到目前为止,在IAP安全方案中,我想到在设备上获取所有谷歌帐户并记住我或谷歌服务器上的双md5用于特定购买/订单_no.稍后,当我的应用程序的任何实例将请求此购买时,发送其所有者google-id的双md5,服务器将比较它记住此特定购买/ order_no的至少一个帐户是否等于该ID,然后将回复得当.
但也许有更明确的方案?
android user-identification userid in-app-purchase android-lvl
我想在我的网站上根据他们的电子邮件ID注册用户,假设用户和他们的emailid字符串之间存在一对一的关系.但是gmail没有.在电子邮件ID中识别s.这意味着juzerali@gmail.com并且juzer.ali@gmail.com是相同的用户(或emaild ID).
我关注的不仅仅是这一个用例,只需剥离一串点就可以克服它.不同的电子邮件提供商可能对电子邮件别名和符号有不同的策略.
我向社区提出的问题是,是否存在基于其电子邮件ID作为唯一标识符创建唯一身份用户的事实规则/指南?或者有人在此之前成功实施了这个?
注意:我已经检查了几个根据电子邮件ID注册的网站.他们似乎认为两个gmail id具有不同的组合,.s作为不同的电子邮件ID.这意味着同一个电子邮件帐户持有人可以在同一个网站上拥有两个帐户,我想避免这两个帐户.
重要提示:Oauth/OpenID不是一个选项.
是否有良好的库或逻辑来创建这个:用户识别的持久(几年)会话.像Gmail和Facebook这样的会话管理将是奖金.