2012-09-13 26 views
8

El documentation page de esta nueva clase, introducido en XE2, solo contiene referencias a la documentación de TObject o marcadores de posición. Veo que esta clase ofrece un método RegisterLoginHandler y un método UnRegisterLoginHandler, que usa una clase TLoginCredentialEvent. Y esto usa un objeto TLoginEvent con nombre de usuario y contraseña.Ejemplo de uso de TLoginCredentialService

¿Cómo sería el caso de uso típico de esta clase (código fuente)? ¿Se usa en algún lugar de las bibliotecas de servicios web/Delphi Datasnap?

+0

Se puede ver la ayuda en línea actualizada aquí: http://docwiki.embarcadero.com/Libraries/XE6/en/System.Classes. TLoginCredentialService – Johan

+1

@Johan Esa documentación también está casi vacía. – GolezTrol

Respuesta

4

que acaba de crear una pequeña demostración de cómo usarlo

Haga clic here para descargar el código

En el siguiente voy a mostrar algunos de los códigos:

Primero necesito un registro para mantener credenciales, y una lista de ellos:

Type 
    TCredential = record 
    Username, Password, Domain: string; 
    constructor Create(const aUsername, aPassword, aDomain: string); 
    function AreEqual(const aUsername, aPassword, aDomain: string): Boolean; 
    end; 

    TCredentialList = class(TList<TCredential>) 
    public 
    function IsValidCredential(const aUsername, aPassword, aDomain: string): Boolean; 
    end; 

entonces tenemos que definir un contexto en el que estamos llamando wich esto. Eso es sólo una aplicación única identifyes cadena wich cada Loginfunction

const 
    Context = 'TForm1'; 

En Forma crean Creo mi lista y añadir datos ficticios a ella

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    CredentialList := TCredentialList.Create; 
    //Add Dummy data 
    CredentialList.Add(TCredential.Create('AA', 'AA', 'DomainAA')); 
    CredentialList.Add(TCredential.Create('BB', 'BB', 'DomainAA')); 
    CredentialList.Add(TCredential.Create('CC', 'CC', 'DomainAA')); 

    // Register your Login handler in a context. 
    // This method is called when you try to login 
    // by caling TLoginCredentialService.GetLoginCredentials(); 
    TLoginCredentialService.RegisterLoginHandler(Context, LoginCredentialEvent); 
end; 

He colocado un botón en mi forma de wich hago mi llaman a iniciar sesión:

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    // The actual call to login 
    // First param is the context 
    // Second Parameres is a callback function given to the event handler. 
    TLoginCredentialService.GetLoginCredentials(Context, 
    function { LoginFunc } (const Username, Password, Domain: string): Boolean 
    begin 
     //The actual user validation 
     Result := CredentialList.IsValidCredential(Username, Password, Domain); 
    end); 
end; 

Finalmente sólo tiene que poner en práctica mi loginhandler:

//This is the "onLogin" event handler. 
//This is called durring a login attempt 
//The purpose of this event handler are to call tha callBack function with correct information 
//and handle the result 
procedure TForm1.LoginCredentialEvent(Sender: TObject; Callback: TLoginCredentialService.TLoginEvent; var Success: Boolean); 
begin 
    //Call the callback 
    Callback(Sender, LabeledEdit1.Text, LabeledEdit2.Text, LabeledEdit3.Text, Success); 

    //Handle the success. 
    if Success then 
    Label1.Caption := 'Yes' 
    else 
    Label1.Caption := 'No'; 
end; 

Hope esto responde a la question.Dont se olvide de descargar el código completo here

+0

Me resulta un poco extraño que tenga que recurrir a usar globales en su controlador de inicio de sesión. Me refiero a la contraseña del usuario de las cadenas, etc. Debes pasarlas desde los controles de edición, mientras que no tienes que conocer tu función de validación (se remite). Diseño extraño ... –

Cuestiones relacionadas