① Thinkphp框架简单的注册登录里用户权限控制怎么实现
可以参照mysql的功能权限的做法,我不知道你提问的是不是这个权限,举个例子:
你后台可能有贴子管理,用户管理等等功能,假设帖子管理使用权限是1,用户管理使用权限是2,没有权限是0
新建三个表,一个是管理员表,一个是角色表,一个是管理员和角色关系表
举两个角色的例子,一个是普通管理员,一个是超级管理员,当新增超级管理员角色的时候角色的时候,此时超级用户的权限应该是12,当新增普通管理员的时候,他只有管理帖子的权限,那么他的权限就是10,这样角色表里面就有两个角色了
接着,新增用户的时候,例如新增一个用户叫题主,新增的时候选择一个角色是普通管理员,写入数据库后,顺便写进角色和用户之间的关系表,这样就能做到权限的控制了,也可以细分到编辑,删除,添加等权限,不过要保证方法名字一样。
当然这里只是粗略的说了一下而已,真做起来有挺多问题,尝试一下就知道了
前台用户注册登录权限思路也差不多,自己想想,做做就清楚了
还有就是可以google一下RBAC的数据库设计
② 用php语言做一个后台登录
会玩框架不?用thinkphp框架 cms,可以免费下载
③ 用php的CI框架怎么写登录和注册
在view里写login.php,在controller里写插入数据库的代码,同时调用。
④ PHP如何实现注册和登录
注册页面前面加个下拉框或者单选按钮,然后把值传过去,登录的时候也选择,传值,然后在相应的分类查找这个人。注册页面前面加个下拉框或者单选按钮,然后把值传过去,登录的时候也选择,传值,然后在相应的分类查找这个人。
⑤ php在CodeIgniter框架中怎样编写登录界面的验证并实现登录
建议你下个别人的框架看看,或者买本php的书籍,你是php基础不会。
⑥ ThinkPHP框架中登录验证如何实现
Action类提供了一个初始化方法_initialize接口,可以用于扩展需要,_initialize方法会在所有操作方法调用之前首先执行,所以你只要把验证代码放在Action类的_initialize()方法中即可,这样访问该类的方法都经过了验证。参考ThinkPHP完全开发手册13.3节——控制器扩展。
另外,假如你需要验证的Action类比较多,可以专门建立一个验证类,写一次_initialize()方法,然后需要验证的其他Action类继承自该验证类即可。
12345678910111213// 验证类Class AuthorizedAction extends Action{ Public function _initialize(){ // 初始化的时候检查用户权限 $this->checkRbac(); } } // 继承自验证类 Class UserAction extends AuthorizedAction{ Public function userfunction(){ // TO DO ... } }
⑦ thinkphp框架有登陆功能吗
没有整合登录功能。但是登录所需要的组件都有,自己写出来很容易的
⑧ php thinkphp3.2怎么做会员登录
现在很多网站都有 QQ互联 和新浪微博 一键登录功能,国内很多php开源项目的代码都是使用thinkphp框架编写的,但是thinkphp框架如何添加QQ互联 和新浪微博 一键登录功能呢?
工具/原料
Thinkphp3.2版本源码
QQ互联 和新浪微博 申请到的 APPID和APPKEY。
方法/步骤
一:到腾讯QQ互联上申请APPID和APPKEY。申请地址: http://connect.qq.com/ 如同,这里我们可以获取到需要跳转到的APPID和APPKEY。新浪微博的申请同理
二:在Thinkphp官网下载 Thinkphp3.2版本的框架源码
本地安装好Thinkphp后,找到应用下的,Common/conf/config.php文件里加上。QQ互联对应的APPID和APPKEY等QQ_AUTH配置信息:
'QQ_AUTH' => array(
'APP_ID' => '1XDXXXXX', //你的QQ互联APPID
'APP_KEY' => '2XXXXXXXXXXXXXXXXXXXXX',
'SCOPE' => 'get_user_info,get_repost_list,add_idol,add_t,del_t,add_pic_t,del_idol',
'CALLBACK' => 'http://www..com/user/oauth/callback/type/qq.html',
),
//新浪微博的配置同理一样。
在Common目录下建立一个文件夹api。创建文件QQConnect.class.php ,添加如下代码,这里是 我们写好的一个类:
<?php
namespace Common\Api;
class QQConnect{
/**
* 获取QQconnect Login 跳转到的地址值
* @return array 返回包含code state
*
**/
public function login($app_id, $callback, $scope){
$_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
$login_url = "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id="
.$app_id. "&redirect_uri=" . urlencode($callback)
. "&state=" . $_SESSION['state']
. "&scope=".urlencode($scope);
//显示出登录地址
header('Location:'.$login_url);
}
/**
* 获取access_token值
* @return array 返回包含access_token,过期时间的数组
* */
private function get_token($app_id,$app_key,$code,$callback,$state){
if($state !== $_SESSION['state']){
return false;
exit();
}
$url = "https://graph.qq.com/oauth2.0/token";
$param = array(
"grant_type" => "authorization_code",
"client_id" => $app_id,
"client_secret" => $app_key,
"code" => $code,
"state" => $state,
"redirect_uri" => $callback
);
$response = $this->get_url($url, $param);
if($response == false) {
return false;
}
$params = array();
parse_str($response, $params);
return $params["access_token"];
}
/**
* 获取client_id 和 openid
* @param $access_token access_token验证码
* @return array 返回包含 openid的数组
* */
private function get_openid($access_token) {
$url = "https://graph.qq.com/oauth2.0/me";
$param = array(
"access_token" => $access_token
);
$response = $this->get_url($url, $param);
if($response == false) {
return false;
}
if (strpos($response, "callback") !== false) {
$lpos = strpos($response, "(");
$rpos = strrpos($response, ")");
$response = substr($response, $lpos + 1, $rpos - $lpos -1);
}
$user = json_decode($response);
if (isset($user->error) || $user->openid == "") {
return false;
}
return $user->openid;
}
/**
* 获取用户信息
* @param $client_id
* @param $access_token
* @param $openid
* @return array 用户的信息数组
* */
public function get_user_info($app_id,$token,$openid){
$url = 'https://graph.qq.com/user/get_user_info?oauth_consumer_key='.$app_id.'&access_token='.$token.'&openid='.$openid.'&format=json';
$str = $this->get_url($url);
if($str == false) {
return false;
}
$arr = json_decode($str,true);
return $arr;
}
/**
* 请求URL地址,返回callback得到返回字符串
* @param $url qq提供的api接口地址
* */
public function callback($app_id, $app_key, $callback) {
$code = $_GET['code'];
$state = $_GET['state'];
$token = $this->get_token($app_id,$app_key,$code,$callback,$state);
$openid = $this->get_openid($token);
if(!$token || !$openid) {
return false;
exit();
}
return array('openid' => $openid, 'token' => $token);
}
/*
* HTTP GET Request
*/
private function get_url($url, $param = null) {
if($param != null) {
$query = http_build_query($param);
$url = $url . '?' . $query;
}
$ch = curl_init();
if(stripos($url, "https://") !== false){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
$content = curl_exec($ch);
$status = curl_getinfo($ch);
curl_close($ch);
if(intval($status["http_code"]) == 200) {
return $content;
}else{
echo $status["http_code"];
return false;
}
}
/*
* HTTP POST Request
*/
private function post_url($url, $params) {
$ch = curl_init();
if(stripos($url, "https://") !== false) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
$content = curl_exec($ch);
$status = curl_getinfo($ch);
curl_close($ch);
if(intval($status["http_code"]) == 200) {
return $content;
} else {
return false;
}
}
}
在项目下创建一个User模板,然后再创建一个OauthConnect.class.php文件,用户调用 QQConnect.class.php。
OauthConnect.class.php里面加入如下,
<?php
namespace User\Controller;
use Think\Controller;
class OauthController extends Controller {
/*
* Type类型,初始化
* QQConnet WeiboConnect
*/
public function index(){
switch ($_GET['type']) {
/* QQ互联登录 */
case qq:
$app_id = C('QQ_AUTH.APP_ID');
$scope = C('QQ_AUTH.SCOPE');
$callback = C('QQ_AUTH.CALLBACK');
$sns = new \Common\Api\QQConnect;
⑨ php如何实现登陆后返回原页面
访问网站页面时,有的页面需要授权才能访问,这时候就会要求用户登录,跳转到登录页面login.php,怎么实现登录后返回到刚才访问的页面
项目需求
访问网站页面时,有的页面需要授权才能访问,这时候就会要求用户登录,跳转到登录页面login.php,怎么实现登录后返回到刚才访问的页面。
解决思路1:
在跳转到登录页面之前要将当前访问页面的url保存到cookie里面,登录验证授权通过后,从cookie中取出这个url值,跳转到该 url指定的页面。
具体实现
我现在的程序是基于ThinkPHP框架的,我们会有一个父类控制器,下面我就把这个设置cookie的代码加到这个BaseAction里面的_initialize()函数中,这样程序就大大简化工作量了。
代码如下:
Cookie::set('refer', $refer);
登录检测的函数里面我们加入:
代码如下:
$refer = Cookie::get('refer');
现在这个$refer就是我们之前访问的页面,我们可以通过AJAX返回这个参数,然后进行跳转,或者直接使用程序进行跳转,具体要根据你程序的需求了。
解决思路2:
除了存成cookie的形式,相信大家也看到了很多大型网站直接采用GET的形式获得,Drupal的登陆机制就是这样。
这种思路具体是这样的:
在跳转到登录页面前要将访客访问的页面的url作为参数传递过去,登录验证后,授予访问权限之后跳转到该url指定的页面。
比如登录前的url为:openphp.html 当访客访问时,点击无权限,跳转到登录页面的地址就为login.php?url=openphp.html,这样在登录时就可以用GET方式获取该参数 openphp.html,登录验证成功后跳转到openphp.html 这个页面就可以了。
大致上我也就这两种思路了,如果你有更好的思路,真心希望你可以告诉我。
⑩ 使用thinkphp框架实现单点登录,服务端也要用tp,谁弄过
可以参考各大开源软件的实现模式,如discuz的uc,phpcms的phpsso等