我的问题,指南和文件有点复杂和令人困惑。 它仅设置"实现[ClassName]",但没有显示示例。
我的代码(必须重写的旧代码)如下:
class MyAuthPlugin extends AuthPlugin {
protected $isAuthenticated = false;
function modifyUITemplate( &$template ) {
$template->set( 'usedomain', false );
$template->set( 'useemail', false );
$template->set( 'canreset', false );
$template->set( 'create', false );
}
function autoCreate() {
return true;
}
function userExists( $username ) {
return true; //already handled in ohter function
}
function strict() {
return true;
}
/* Being called twice:
* Login->attemptAutoCreate() (SpecialUserLogin.php) (only for new)
* User->checkPassword() (User.php) external PW-authentication.
*/
function authenticate( $username, $password ) {
global $BBredirect, $BBconnection, $wgRequest;
if($this->isAuthenticated) return true;
$BBConnection['Parameters'] = 'cmd=authenticate&sessionId='.$wgRequest->getVal('sessionId');
$myRequest = new SimpleHttpRequest($BBConnection);
$responseGET = $myRequest->doRequest(SimpleHttpRequest::HTTP_GET);
echo ($responseGET[Content]);
$auth = simplexml_load_string($responseGET[Content]);
if($auth->response->authentication == 'false') {
return false;
}
if($auth->response->authentication == 'ok') {
$this->isAuthenticated = true;
}
return $this->isAuthenticated;
}
function isAuthenticated() {
return $this->isAuthenticated;
}
}
如何将此代码转换为新的AuthManager样式? 这guide提出了很多不同的类......
userExists()→PrimaryAuthenticationProvider :: testUserExists()
authenticate()→PrimaryAuthenticationProvider :: beginPrimaryAuthentication + PasswordAuthenticationRequest(如何将密码传递给流程?)
$wgAuth = new MyAuthPLugin()
不推荐使用文件。或者,当在html-Request中给出用户名,密码(哈希),sessionID和密钥时,是否有一种简单的自动登录方式?
答案 0 :(得分:1)
你需要:
getAuthenticationRequests
;你可能想要在PasswordAuthenticationRequest
上返回一个新的ACTION_LOGIN
对象,否则就没有了(因为你不想支持创建BB用户/通过wiki更改他们的密码)。beginPrimaryAuthentication
;它将与旧authenticate
大致相同,除了您将凭据作为AuthenticationRequest
个对象的数组获取并使用AuthenticationRequest::getRequestByClass( $reqs, PasswordAuthenticationRequest::class )
来获取正确的对象,然后返回AuthenticationResponse::newXXX
表示结果(newPass
或newFail
- 没有弃权,因为您不想支持退回到另一种身份验证方法)。如果用户不在本地,则自动创建是自动生成的。testUserExists
。这应该在BB数据库中查找用户。 (只是一直返回true或false也可能会起作用 - 这主要是因为提供者可以保留名称并阻止其他提供者接受它。)beginPrimaryAccountCreation
和accountCreationType
。由于您可能不希望通过Wiki支持BB帐户创建,因此只需分别返回AuthenticationResponse::newFail
和TYPE_NONE
。providerAllowsAuthenticationDataChange
和providerChangeAuthenticationData
。第一个应该在收到密码验证请求时返回错误,否则忽略它。第二个应该是空的。