2012-09-13 39 views
8

documentation page của lớp mới này - được giới thiệu trong XE2 - chỉ chứa tham chiếu đến tài liệu TObject hoặc trình giữ chỗ. Tôi có thể thấy rằng lớp này cung cấp một phương thức RegisterLoginHandler và phương thức UnRegisterLoginHandler, sử dụng lớp TLoginCredentialEvent. Và điều này sử dụng một đối tượng TLoginEvent với tên người dùng và mật khẩu.Ví dụ về cách sử dụng TLoginCredentialService

Trường hợp sử dụng điển hình của lớp này trông như thế nào (mã nguồn)? Nó được sử dụng ở đâu đó trong thư viện Delas Datasnap/Web services?

+0

Bạn có thể xem được cập nhật giúp đỡ trực tuyến tại đây: http://docwiki.embarcadero.com/Libraries/XE6/en/System.Classes. TLoginCredentialService – Johan

+1

@Johan Tài liệu đó cũng hầu như trống. – GolezTrol

Trả lời

4

Tôi vừa mới tạo ra một bản demo nhỏ về cách sử dụng nó

Bấm here tải mã

Trong sau tôi sẽ hiển thị một số mã:

Trước tiên tôi cần một bản ghi để giữ Thông tin đăng nhập và danh sách các thông tin đó:

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; 

thì chúng tôi cần xác định ngữ cảnh mà chúng tôi đang gọi. Thats chỉ là một ứng dụng độc đáo identifyes chuỗi Mà mỗi Loginfunction

const 
    Context = 'TForm1'; 

Trong Form tạo tôi có thể tạo danh sách của tôi và thêm dữ liệu giả để nó

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; 

tôi đã đặt một nút trên hình thức của tôi từ Mà tôi làm cho tôi gọi để đăng nhập:

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; 

Cuối cùng tôi chỉ cần phải thực hiện loginhandler tôi:

//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; 

Hy vọng điều này trả lời cho question.Dont quên để tải về các mã hoàn chỉnh here

+0

Tôi tìm thấy nó một chút lạ mà bạn phải nghỉ mát để sử dụng globals trong xử lý đăng nhập của bạn. Tôi có nghĩa là mật khẩu người dùng dây vv .. Bạn phải vượt qua chúng từ điều khiển chỉnh sửa trong khi bạn không cần phải biết chức năng xác nhận của bạn (nó được trả lại). Thiết kế lạ .. –

Các vấn đề liên quan