我的网站为用户提供创建帐户并使用Facebook登录。用户表包含:userId(generated by $userId = uniqid(rand(), true;
,如果用户创建自己的帐户)。密码,盐,电子邮件,加入日期。
第一个问题:
我不确定我在facebook上做的事情是否安全。现在我从facebook获取用户ID并使用xmlhttpRequest对象将其发送到服务器。然后服务器将其存储在userID下,并将其他列留空。
第二个问题:
facebook userID与uniquid(rand(), true)
第3个问题:
使用客户端登录是否安全?我的意思是用户也会看到我的App ID。
第四个问题: 为了判断该条目是Facebook帐户还是普通帐户,我应该在数据库中添加另一列,true = facebook account,false = normal account。或者我应该检查某个帐户的密码列是否为空白?答案 0 :(得分:1)
以thepointless.com为例,每个用户都会获得一个自动递增的ID,包括Facebook用户。外部身份验证服务由username
识别,其中包含“不规则”用户的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用户的用户名是其图表数据的网址,例如http://graph.facebook.com/8643372
。只要系统识别域和外部[唯一] ID,系统中就没有必要指向真实的东西。在这种情况下,用户的公共图形对象就是一个简短,可预测的URL。
普通用户不得使用http
或https
为其用户名添加前缀。 password
留空。 userdata
存储第三方认证服务提供的JSON或XML。
服务器端逻辑通常不应信任完全客户端登录。但是,JavaScript启动登录的服务器端验证通常并不困难。并且没有理由不至少在初步的基础上信任客户端上的完全客户端身份验证。
据我所知,没有必要保密你的App ID。这是你的“App 秘密”,需要保持隐藏状态。