×

thinkphp登录示例

thinkphp登录示例的简单介绍

admin admin 发表于2023-03-21 15:53:09 浏览55 评论0

抢沙发发表评论

本文目录一览:

thinkPHP怎么获取登陆的用户ID啊?

无论什么框架的登录系统都是差不多的,基本都是存入session里面的,最多就是存储的方式不一样而已,比如有的保存为文件的形式,而有的是保存在数据库中,再者存在memcache中等等。

都是在用户登录的时候,拿用户名和密码去数据库中比对是否有该用户,有的话就存入session,没有的话就直接登录失败。

登录成功后会把相应的数据存入session中,一般用户的id都会保存的,你可以打印一下session看看里面到底存的哪些东西,然后你就知道怎么去取了。

thinkPHP5.0 怎么写注册登陆接口啊?麻烦哪位大神给个例子

简单登录接口

?php

namespace app\index\controller;

use think\Db;

class User extends Base

{

public function login() {

    if(request()-isPost()) {

       if(request()-isAjax()) {    

            $formdata = request()-post();

            if(isset($formdata['username'])  isset($formdata['password'])) {

                $query = Db::name('users')-where(['username'=$formdata['username']])-find();

                if($query) {

                    if($query['password'] == md5($formdata['username'].$formdata['password'])) {

                        if($query['locked'] != 1) {

                            session('user_id',$query['uid']);//保存登录会话

                            return json([

                                'status'    =    1,

                                'message'=    '登陆成功'

                            ]);

                        } else {

                            return json([

                                 'status'    =    -1,

                                 'message'=    '该帐号已被锁定(禁用)',

                            ]);

                        }

                    } else {

                        return json([

                            'status'    =    -1,

                            'message'=    '用户名或密码错误',//密码对不上

                        ]);

                    }

                } else {

                    return json([

                        'status'    =    -1,

                        'message'=    '用户名或密码错误',//用户名不存在

                    ]);

                }

            } else {

                return json([

                    'status'    =    -1,

                    'message'=    '表单错误:缺少必要参数'

                ]);

            }

        } else {

            return json([

                'status'    =    -1,

                'message'    =    'Must use ajax.',

            ]);

        }

    } else {

        //如果不是post请求,则显示登录页

        return $this-fetch();

    }

}

}

php thinkphp3.2怎么做会员登录

现在很多网站都有 QQ互联 和新浪微博 一键登录功能,国内很多php开源项目的代码都是使用thinkphp框架编写的,但是thinkphp框架如何添加QQ互联 和新浪微博 一键登录功能呢?

工具/原料

Thinkphp3.2版本源码

QQ互联 和新浪微博 申请到的 APPID和APPKEY。

方法/步骤

一:到腾讯QQ互联上申请APPID和APPKEY。申请地址: 如同,这里我们可以获取到需要跳转到的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' = '',

),

//新浪微博的配置同理一样。

在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 = ";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 = "";

$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 = "";

$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 = ''.$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;

Thinkphp用户登录怎么做

新建一个验证session的类,需要验证登录的类都继承这个类,再建登录验证类,不要继承那个验证session的类。session验证里如果未设置则跳转到登录页面,登录页面action到登录方法去验证用户名和密码。-thinkphp登录示例