목차
新浪微博OAuth认证和储存的主要过程详解,oauth详解
Hello <?=$_SESSION['username'] ?>
백엔드 개발 PHP 튜토리얼 新浪微博OAuth认证和储存的主要过程详解,oauth详解_PHP教程

新浪微博OAuth认证和储存的主要过程详解,oauth详解_PHP教程

Jul 13, 2016 am 10:00 AM
oauth oauth 인증 가게 시나 웨이보

新浪微博OAuth认证和储存的主要过程详解,oauth详解

网上很多关于OAuth的文章,但是包括sina本身都都没有详细的的介绍,包括验证过程和验证后数据的储存,所以参考了Twitter的认证过程写下一些详细的注释代码。

在我们开始前,我们先建立一张数据库来保存用户信息,下面是一个基本的 Mysql 的例子:

CREATE TABLE `oauth_users` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `oauth_provider` VARCHAR(10),
  `oauth_uid` text,
  `oauth_token` text,
  `oauth_secret` text,
  `username` text,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
로그인 후 복사

注意 oauth_token 和 oauth_secret 这两个字段。sina的 OAuth 认证需要 token 和 token_secret 两个参数来完成认证,所以我们需要预留两个字段来记录他们。

然后我们需要依次完成以下工作:

向 SinaAPI发起认证申请 注册/或者登录,如果用户已经有帐号的情况下 将相关数据保存在 Session 中

基于 OAuth 的认证流程从生成一个网址开始。用户被重定向到该网址要求认证,认证通过后,会重定向到我们的应用服务器,并会将两个认证后的参数通过 URL 方式传回。

建立index.php

<&#63;php
session_start();
//if( isset($_SESSION['last_key']) )
  header("Location: weibolist.php");
include_once( 'config.php' );
include_once( 'weibooauth.php' );
// 创建 sinaOAuth 对象实例
$sinaOAuth = new WeiboOAuth( WB_AKEY , WB_SKEY );
$keys = $sinaOAuth->getRequestToken();
// Requesting authentication tokens, the parameter is the URL we will be redirected to
$aurl = $sinaOAuth->getAuthorizeURL( $keys['oauth_token'] ,false , 'http://t.yourtion.com/sina/callback.php');
// 保存到 session 中
$_SESSION['keys'] = $keys;
&#63;>
<a href="<&#63;=$aurl&#63;>">Use Oauth to login</a>
로그인 후 복사

接下来,我们还需要在这个文件中完成以下三件事:

验证 URL 中的数据
验证 Session 中的 token 数据
验证 Session 中的 secret 数据

如果所有数据库都是合法的,我们需要创建一个新的 SinaOAuth 对象实例,跟之前不同的是,我们要把获取到的 token 数据做为参数传入对象。之后,我们应该可以获取到一个 access token,这个获取到的数据应该是一个数组,这个 access token 是我们唯一需要保存起来的数据。

建立callback.php

<&#63;php
session_start();
include_once ('config.php');
include_once ('weibooauth.php');
if (!empty($_GET['oauth_verifier']) && !empty($_SESSION['keys']['oauth_token']) &&
  !empty($_SESSION['keys']['oauth_token']))
{
  // SinaOAuth 对象实例,注意新加入的两个参数
  $sinaOAuth = new WeiboOAuth(WB_AKEY, WB_SKEY, $_SESSION['keys']['oauth_token'],
    $_SESSION['keys']['oauth_token_secret']);
  // 获取 access token
  $access_token = $sinaOAuth->getAccessToken($_REQUEST['oauth_verifier']);
  // 将获取到的 access token 保存到 Session 中
  $_SESSION['access_token'] = $access_token;
  // 获取用户信息
  $user_info = $sinaOAuth->get('account/verify_credentials');
  // 打印用户信息
  mysql_connect(DATABASE_HOST, DATABASE_USER, DATABASE_PSSWORD);
  mysql_select_db(DATABASE_DB_NAME);
  //更换成你的数据库连接,在config.php中
  if (isset($user_info->error) or empty($user_info['id']))
  {
    // Something's wrong, go back to square 1
    header('Location: index.php');
  } else
  {
    // Let's find the user by its ID
    $sql = "SELECT * FROM oauth_users WHERE oauth_provider='sina' AND oauth_uid=" .$user_info['id'];
    $query = mysql_query($sql);
    $result = mysql_fetch_array($query);
    // If not, let's add it to the database
    if (empty($result))
    {
      $sql = "INSERT INTO oauth_users (oauth_provider, oauth_uid, username, oauth_token, oauth_secret) VALUES ('sina', '" .
        $user_info['id'] . "', '" . $user_info['screen_name'] . "', '" . $access_token['oauth_token'] .
        "', '" . $access_token['oauth_token_secret'] . "')";
      $query = mysql_query($sql);
      $query = mysql_query("SELECT * FROM oauth_users WHERE id = ".mysql_insert_id());
      $result = mysql_fetch_array($query);
    } else
    {
      // Update the tokens
      $query = mysql_query("UPDATE oauth_users SET oauth_token = '" . $access_token['oauth_token'] .
        "', oauth_secret = '" . $access_token['oauth_token_secret'] .
        "' WHERE oauth_provider = 'sina' AND oauth_uid = " . $user_info['id']);
    }
    $_SESSION['id']=$result['id'];
    $_SESSION['username']=$result['username'];
    $_SESSION['oauth_uid']=$result['oauth_uid'];
    $_SESSION['oauth_provider']=$result['oauth_provider'];
    $_SESSION['oauth_token']=$result['oauth_token'];
    $_SESSION['oauth_secret']=$result['oauth_secret'];
    header('Location: update.php');
  }
} else
{
  // 数据不完整,转到上一步
  header('Location: index.php');
}

&#63;>

로그인 후 복사

你可以通过 $user_info->id 来获得用户的 ID,通过 $user_info->screen_name 来获取用户名,等等,其它的信息也可以通过同样的方式获取。

需要重点指出的是,oauth_verifier 这个传回来的参数不能被重用,如果上面的代码已经正确输出了用户信息,你可以试着重新刷新页面,应该会看到页面会抛出一个错误信息,因为 oauth_verifier 已经被我们用过一次了。要再次使用,需要到 index.php 页面重新发起一个认证请求。

用户注册

获得了用户信息后,现在我们要开始把用户信息注册到我们自己的数据库中,当然前提是用户没有在本地数据库注册过。

上面代码中的数据库链接信息要改成你自己的。如果用户已经存在于我们的数据库中,我们需要更新用户的 tokens 字段,因为这说明 Twitter 生成了新的 tokens,数据库中的 tokens 已经过期了。如果用户不存在,我们需要新加一条记录,并将相关的数据保存在 Session中,最后重定向回 update.php 页面。

其中update.php代码如下:

需要注意的是,上面代码中的 SQL 没有经过验证,你在实际使用的时候可能要经过修改。连接数据库前,我们需要先验证一下用户是否已经登录。有了用户名,我们就可以展示一条个性的欢迎信息了:

<&#63;php
include_once ('config.php');
include_once ('weibooauth.php');
session_start();
if(!empty($_SESSION['username'])){
  // User is logged in, redirect
  header('index.php');
}
&#63;>
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="zh-CN">
<head profile="http://gmpg.org/xfn/11">
  <title>通过 OAuth 进行身份验证--Yourtion</title>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>
<body>
<h2 id="Hello-SESSION-username">Hello <&#63;=$_SESSION['username'] &#63;></h2>
</body>
</html>
로그인 후 복사

这就是OAuth认证和储存的主要过程,希望对你有帮助。 代码下载:SinaOauth

以上就是本文所述的全部内容了,希望大家能够喜欢。

请您花一点时间将文章分享给您的朋友或者留下评论。我们将会由衷感谢您的支持!

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/974659.htmlTechArticle新浪微博OAuth认证和储存的主要过程详解,oauth详解 网上很多关于OAuth的文章,但是包括sina本身都都没有详细的的介绍,包括验证过程和验...
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP 개발: Laravel Passport를 사용하여 OAuth2 서비스 제공자 구현 PHP 개발: Laravel Passport를 사용하여 OAuth2 서비스 제공자 구현 Jun 15, 2023 pm 04:32 PM

모바일 인터넷의 인기로 인해 점점 더 많은 애플리케이션에서 사용자가 스스로 인증하고 권한을 부여해야 합니다. OAuth2는 이러한 기능을 구현하기 위한 표준화된 메커니즘을 애플리케이션에 제공하는 널리 사용되는 인증 및 권한 부여 프레임워크입니다. LaravelPassport는 PHP 개발자에게 OAuth2 인증 및 승인 구축을 위한 강력한 도구를 제공하는 사용하기 쉽고 안전하며 즉시 사용 가능한 OAuth2 서버 구현입니다. 이번 글에서는 LaravelPassport의 사용법을 소개하겠습니다.

PHP 및 OAuth: Microsoft 로그인 통합 구현 PHP 및 OAuth: Microsoft 로그인 통합 구현 Jul 28, 2023 pm 05:15 PM

PHP 및 OAuth: Microsoft 로그인 통합 구현 인터넷이 발전하면서 편리한 등록 및 로그인 환경을 제공하기 위해 사용자가 제3자 계정을 사용하여 로그인할 수 있도록 지원해야 하는 웹 사이트와 응용 프로그램이 점점 더 많아지고 있습니다. Microsoft 계정은 전 세계적으로 널리 사용되는 계정 중 하나이며 많은 사용자가 Microsoft 계정을 사용하여 웹 사이트 및 응용 프로그램에 로그인하기를 원합니다. Microsoft 로그인 통합을 달성하기 위해 OAuth(Open Authorization) 프로토콜을 사용할 수 있습니다. OAuth는 사용자가 제3자 애플리케이션에 권한을 부여하여 자신을 대신할 수 있도록 하는 개방형 표준 인증 프로토콜입니다.

PHP의 OAuth: JWT 인증 서버 만들기 PHP의 OAuth: JWT 인증 서버 만들기 Jul 28, 2023 pm 05:27 PM

PHP의 OAuth: JWT 권한 부여 서버 만들기 모바일 애플리케이션이 증가하고 프런트엔드와 백엔드가 분리되는 추세로 인해 OAuth는 최신 웹 애플리케이션에서 없어서는 안 될 부분이 되었습니다. OAuth는 표준화된 프로세스와 메커니즘을 제공하여 사용자의 리소스를 무단 액세스로부터 보호하는 인증 프로토콜입니다. 이 기사에서는 PHP를 사용하여 JWT(JSONWebTokens) 기반 OAuth 인증 서버를 만드는 방법을 알아봅니다. JWT는 일종의

PHP 및 OAuth를 사용하여 Google 드라이브 통합을 수행하는 방법 PHP 및 OAuth를 사용하여 Google 드라이브 통합을 수행하는 방법 Jul 31, 2023 pm 04:41 PM

PHP 및 OAuth를 사용하여 GoogleDrive 통합을 수행하는 방법 GoogleDrive는 사용자가 클라우드에 파일을 저장하고 다른 사용자와 공유할 수 있는 널리 사용되는 클라우드 스토리지 서비스입니다. GoogleDriveAPI를 통해 PHP를 사용하여 GoogleDrive와 통합하여 파일 업로드, 다운로드, 삭제 및 기타 작업을 구현하는 코드를 작성할 수 있습니다. GoogleDriveAPI를 사용하려면 OAuth를 통해 인증해야 하며

Laravel 개발: Laravel Passport를 사용하여 API OAuth2 인증을 구현하는 방법은 무엇입니까? Laravel 개발: Laravel Passport를 사용하여 API OAuth2 인증을 구현하는 방법은 무엇입니까? Jun 13, 2023 pm 11:13 PM

API 사용이 더욱 광범위해짐에 따라 API의 보안과 확장성을 보호하는 것이 점점 더 중요해지고 있습니다. OAuth2는 애플리케이션이 인증을 통해 보호된 리소스에 액세스할 수 있도록 널리 채택된 API 보안 프로토콜이 되었습니다. OAuth2 인증을 구현하기 위해 LaravelPassport는 간단하고 유연한 방법을 제공합니다. 이번 글에서는 LaravelPassport를 사용하여 APIOAuth2 인증을 구현하는 방법을 알아 보겠습니다. 라르

PHP에서 OAuth2 인증 방법 및 구현 PHP에서 OAuth2 인증 방법 및 구현 Aug 07, 2023 pm 10:53 PM

PHP의 OAuth2 인증 방법 및 구현 인터넷이 발전함에 따라 점점 더 많은 애플리케이션이 타사 플랫폼과 상호 작용해야 합니다. 사용자 개인 정보 보호 및 보안을 보호하기 위해 많은 타사 플랫폼에서는 OAuth2 프로토콜을 사용하여 사용자 인증을 구현합니다. 이 기사에서는 OAuth2 인증 방법과 PHP에서의 구현을 소개하고 해당 코드 예제를 첨부합니다. OAuth2는 사용자가 언급하지 않고도 타사 애플리케이션이 다른 서비스 공급자의 리소스에 액세스할 수 있도록 권한을 부여할 수 있는 인증 프레임워크입니다.

Sina Weibo 앱에서 그룹 채팅을 만드는 방법 Sina Weibo 앱에서 그룹 채팅을 만드는 방법 Sina Weibo 앱에서 그룹 채팅을 만드는 방법 Sina Weibo 앱에서 그룹 채팅을 만드는 방법 Mar 14, 2024 pm 09:31 PM

Sina Weibo 앱에서 그룹 채팅을 만드는 방법은 무엇입니까? Sina Weibo 앱은 사용자가 이 소프트웨어에서 친목을 도모할 수 있는 소프트웨어입니다. 사용자는 여기에서 서로를 팔로우하고 다른 사용자에게 비공개 메시지를 보낼 수도 있습니다. 많은 사용자가 여전히 그룹 채팅을 만드는 방법을 모르고 있으며 아래 편집기는 참고용으로 그룹 채팅을 만드는 방법을 정리했습니다. Sina Weibo 앱에서 그룹 채팅을 만드는 방법 1. 먼저 소프트웨어를 열고 "메시지" 인터페이스 오른쪽 상단에 있는 "기어" 옵션을 찾아 클릭합니다. 2. 그런 다음 팝업 옵션 상자를 클릭합니다.

Java API 개발에서 인증을 위해 Spring Security OAuth2 사용 Java API 개발에서 인증을 위해 Spring Security OAuth2 사용 Jun 18, 2023 pm 11:03 PM

인터넷이 지속적으로 발전함에 따라 분산 아키텍처를 사용하여 점점 더 많은 애플리케이션이 개발되고 있습니다. 분산 아키텍처에서 인증은 가장 중요한 보안 문제 중 하나입니다. 이 문제를 해결하기 위해 개발자는 일반적으로 OAuth2 인증을 구현합니다. SpringSecurityOAuth2는 OAuth2 인증을 위해 일반적으로 사용되는 보안 프레임워크이며 Java API 개발에 매우 ​​적합합니다. 이 기사에서는 JavaAPI로 개발하는 방법을 소개합니다.

See all articles