我目前正在我的网站上实施OAuth2,以保持用户在Android应用中登录。我想将默认的OAuth2用户数据库更改为我自己的用户数据库。不幸的是,我无法找到如何做到这一点。应该可以覆盖类而不更改核心库中的代码,但是如何做呢?
这就是我在server.php
文件中的内容:
// Autoloading (composer is preferred, but for this example let's just do this)
require_once('/src/OAuth2/Autoloader.php');
OAuth2\Autoloader::register();
$storage = new OAuth2\Storage\Pdo(array('dsn' => 'mysql:host=xxxx;dbname=xxxx', 'username' => 'xxxx', 'password' => 'xxxx'));
// Pass a storage object or array of storage objects to the OAuth2 server class
$server = new OAuth2\Server($storage);
// Add the "Password / User Credentials" grant type
$server->addGrantType(new OAuth2\GrantType\UserCredentials($storage));
所以这里我想用到我自己的用户表而不是默认的oauth_users
表。而且由于密码是盐渍的,我也需要使用不同的密码检查。我正在使用BShaffer OAuth2库:https://github.com/bshaffer/oauth2-server-php
答案 0 :(得分:0)
使用此库可以轻松编写自定义代码,因此您无需触摸此库的核心。 对于此问题,您必须创建一个实现UserCredentialsInterface的自定义存储类。这里有两种方法需要自己实现
public function checkUserCredentials()
public function getUserDetails()
您可以在此处实现检查用户详细信息和获取用户详细信息的逻辑。 在此之后,您需要将此存储添加到oAuth服务器,如下所示:
$server = new OAuth2\Server($storage);
$userStorage = new YourCustomUserStorage();
$server->addStorage($userStorage, 'user_credentials');
您还需要将此存储传递给您要添加到服务器的任何Grant类型,在您的情况下,它看起来像这样:
$server->addGrantType(new OAuth2\GrantType\UserCredentials($userStorage));