我的网站提供用户创建帐户并使用 facebook 登录。用户表包含: userId ( generated by $userId = uniqid(rand(), true;
,如果用户创建自己的帐户)。密码、盐、电子邮件、加入日期。
第一个问题:
我不确定我用 Facebook 所做的事情是否安全。现在我正在从 facebook 获取用户 ID 并使用 xmlhttpRequest 对象将其发送到服务器。然后服务器将其存储在 userID 下,并将其他列留空。
第二个问题:
Facebook 用户 ID 与 uniquid(rand(), true)
生成的普通帐户用户 ID 重叠的可能性是否很大?
第三个问题:
使用客户端登录安全吗?我的意思是,甚至我的 App ID 也会被用户看到。
第四个问题: 为了判断该条目是Facebook帐户还是普通帐户,我应该在数据库中添加另一列,true=facebook帐户,false=普通帐户。或者我应该检查特定帐户的密码列是否为空?
最佳答案
使用thepointless.com例如,每个用户都会获得一个自动递增的 ID,包括 facebook 用户。外部身份验证服务通过用户名
进行识别,其中包含“非正规”用户的 URL:
+----------+------------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+-------------------+----------------+
| user_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| username | varchar(255) | YES | UNI | NULL | |
| password | varchar(255) | YES | | NULL | |
| created | timestamp | NO | | CURRENT_TIMESTAMP | |
| userdata | mediumtext | YES | | NULL | |
| admin | tinyint(1) | YES | | 0 | |
| name | varchar(765) | YES | | NULL | |
+----------+------------------+------+-----+-------------------+----------------+
Facebook 用户的用户名是其图表数据的 URL,例如 http://graph.facebook.com/8643372
。您的系统中没有必要指向真实的东西,只要它标识域和外部[唯一] ID 即可。在这种情况下,用户的公共(public)图形对象是一个简短的、可预测的 URL。
普通用户不能在用户名前添加 http
或 https
前缀。 密码
留空。 userdata
存储第三方身份验证服务提供的 JSON 或 XML。
服务器端逻辑通常不应该信任完全客户端登录。但是,服务器端验证 JavaScript 发起的登录通常并不困难。没有理由不相信(至少在初步基础上)客户端的完全客户端身份验证。
据我所知,您的 App ID 没有必要保密。这是您需要保持 Conceal 的“应用 secret ”。
关于php - Facebook用户信息存储在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18723208/