smtech/oauth2-canvaslms

此包已被废弃且不再维护。未建议替代包。

PHP League 的 OAuth 2.0 Client 对 Canvas LMS 的 OAuth 2.0 支持

v1.0 2016-07-14 18:35 UTC

This package is auto-updated.

Last update: 2023-05-25 12:43:33 UTC


README

Latest Version

此包为 PHP League 的 OAuth 2.0 Client 提供Canvas LMS OAuth 2.0 支持。

安装

在你的 composer.json 中包含以下内容:

"require": {
    "smtech/oauth2-canvaslms": "~1.0"
}

使用

与 League 的 OAuth 客户端相同,使用 \smtech\OAuth2\Client\Provider\CanvasLMS 作为提供者。请注意,你可以(并且确实应该)包括一个 purpose 选项参数,并需要包含你的 canvasInstanceUrl

根据 Canvas OAUth 文档

对于由 Instructure 托管的 Canvas Cloud,你可以在“Dev Key Signup”部分从 http://instructure.github.io/ 请求客户端 ID 和密钥。

对于开源 Canvas 用户,你可以在你的 Canvas 安装中的“Site Admin”账户中生成客户端 ID 和密钥。左侧导航侧边栏上会有一个“Developer Keys”标签。

一个简单的示例

use smtech\OAuth2\Client\Provider\CanvasLMS;

session_start();

/* anti-fat-finger constant definitions */
define('CODE', 'code');
define('STATE', 'state');
define('STATE_LOCAL', 'oauth2-state');

$provider = new CanvasLMS([
    'clientId' => '160000000000127',
    'clientSecret' => 'z4RUroeMI0uuRAA8h7dZy6i4QS4GkBqrWUxr9jUdgcZobpVMCEBmOGMNa2D3Ab4A',
    'purpose' => 'My App Name',
    'redirectUri' => 'https://' . $_SERVER['SERVER_NAME'] . '/' . $_SERVER['SCRIPT_NAME'],
    'canvasInstanceUrl' => 'https://canvas.instructure.com'
]);

/* if we don't already have an authorization code, let's get one! */
if (!isset($_GET[CODE])) {
    $authorizationUrl = $provider->getAuthorizationUrl();
    $_SESSION[STATE_LOCAL] = $provider->getState();
    header("Location: $authorizationUrl");
    exit;

/* check that the passed state matches the stored state to mitigate cross-site request forgery attacks */
} elseif (empty($_GET[STATE]) || $_GET[STATE] !== $_SESSION[STATE_LOCAL]) {
    unset($_SESSION[STATE_LOCAL]);
    exit('Invalid state');

} else {
    /* try to get an access token (using our existing code) */
    $token = $provider->getAccessToken('authorization_code', [CODE => $_GET[CODE]]);

    /* do something with that token... (probably not just print to screen, but whatevs...) */
    echo $token->getToken();
    exit;
}