|
发表于 2016-4-26 11:07:39
|
显示全部楼层
首先你要明白这种涉及第三方登陆的用户表应该怎么设计最合理。按照我的做法,会设计两个表,一个表叫users,存储用户的基础信息,如头像,姓名,昵称,部门,性别,email等,属于个人信息的部分。 另一个表叫members, 存储用户的口令,主要是用户名和 password,用user_id关联上users。涉及到第三方登陆时, members 需要保存openid, provider, token, expried, 等信息。
这样做的好处是, members表可以任意扩展, 一个user可能对应多个member,因为一个用户可能通过QQ或者微信或者微博登录,但是对应的user信息确是一样的。
当然也有偷懒的做法,就是users和members表合并, 基本上上述的一些信息都还是要保存的, 有些字段会冗余。 下面的建议是按照两个表的设计来解决的。
$user中有一个值很重要,openid. 使用openid和provider作为主键可以保存到session中。provider是自定义的一个字段,指定使用的是什么第三方平台,如qq或者sina或者weixin等。
PHP复制代码 $this->model->load('user_model', 'users');
$user['id'] = $this->users->insert($user); //保存到users表。
$this->load->library('session');
$this->session->set_userdata('user', $user); //已保存到session中了。
$member['provider'] = 'qq';
$member['openid'] = '';
$member['expried'] = 123333;
$member['user_id'] = $user['id'];
$this->load->model('member_model', 'members');
$this->members->insert($member); 复制代码
你所写的这个页面,要完成session的保存。如果要绑定用户,可以在这个页面写个注册页面。 注册页面没什么特别的,不过是点击【注册】后 发送到后台需要做的事情可能不一样:
PHP复制代码 $register_data = $this->input->post(NULL, true);
$this->load->model('member_model', 'members');
$user = $this->session->userdata('user');
$register_data['user_id'] = $user['id'];
$this->members->insert($register_data); 复制代码
|
|