Ein sehr gefährliches Unterfangen, wie Ammaletu schon sagte. Aber niemals macht macht man das über POST oder GET Variablen. Das hat WP bereits vorgesehen, du kannst das per Plugin abfangen. Die Authentifizierung läuft über diese Funktion in pluggable.php und kann per Plugin ersetzt werden:
/**
* Checks a user's login information and logs them in if it checks out.
*
* @since 2.5
*
* @param string $username User's username
* @param string $password User's password
* @return WP_Error|WP_User WP_User object if login successful, otherwise WP_Error object.
*/
if ( !function_exists('wp_authenticate') ) :
function wp_authenticate($username, $password) {
$username = sanitize_user($username);
if ( '' == $username )
return new WP_Error('empty_username', __('<strong>ERROR</strong>: The username field is empty.'));
if ( '' == $password )
return new WP_Error('empty_password', __('<strong>ERROR</strong>: The password field is empty.'));
$user = get_userdatabylogin($username);
if ( !$user || ($user->user_login != $username) ) {
do_action( 'wp_login_failed', $username );
return new WP_Error('invalid_username', __('<strong>ERROR</strong>: Invalid username.'));
}
$user = apply_filters('wp_authenticate_user', $user, $password);
if ( is_wp_error($user) ) {
do_action( 'wp_login_failed', $username );
return $user;
}
if ( !wp_check_password($password, $user->user_pass, $user->ID) ) {
do_action( 'wp_login_failed', $username );
return new WP_Error('incorrect_password', __('<strong>ERROR</strong>: Incorrect password.'));
}
return new WP_User($user->ID);
}
endif;
Alles anzeigen
Wenn dein Plugin also eine Funktion
function wp_authenticate($username, $password)
implementiert, kannst du Einfluss nehmen auf die Anmeldung. Deine Funktion sollte den $username und $password mit deiner XML Datei abklären und im Falle korrekter Erkennung den Benutzernamen und das Passwort auf den WP Benutzer setzen (weil beides als Referenz übergeben wird, ändert sich das damit auch).
Also im Grunde baust du eine Kopie der o.g. Funktion, die deinen Check direkt vor der Zeile
[COLOR=#000000][COLOR=#0000cc]$user [/COLOR][COLOR=#006600]= [/COLOR][COLOR=#0000cc]get_userdatabylogin[/COLOR][COLOR=#006600]([/COLOR][COLOR=#0000cc]$username[/COLOR][COLOR=#006600]);[/COLOR][/COLOR]
einschiebt. Im Fehlerfall sollte dein Check einen ungültigen Benutzer/Passwort setzen, im Erfolgsfalle den von dir gewünschten Benutzer/Passwort setzen und in beiden Fällen dann den restlichen Code normal durchlaufen.
Auf diese Weise kann man alle möglichen Authentifizierungssysteme integrieren (LDAP, Corba, Kerberos usw...)