authentication from code using Login control (using reflection)
בהרבה מקרים כשאני משתמש עם ה Login Control,
אני רוצה את האפשרות שבזמן פיתוח, יהיה לי לחצן שכשאני לוחץ עליו, הוא יעשה Login עם שם משתמש וסיסמא קבועים מראש,
(אני לא רוצה להשתמש ב Remember Me)
הבעייה, שה Control הנהדר, נותן לי את האפשרות רק לשנות את ה UserName מקוד,
אבל הוא לא נותן את האפשרות לשנות את הסיסמא מקוד, וגם לא נותן את האפשרות לעשות Login מקוד, ולכן.
מה שאני עושה זה לכתוב את הקוד הבא, ב PageLoad:
1 #if DEBUG
2 Button btn = new Button();
3 btn.Text = "Login With 1 and 1";
4 form1.Controls.Add(btn);
5 btn.Click += (sender1, e1) =>
6 {
7 // get the password field
8 Type loginType = Login1.GetType();
9 FieldInfo password = loginType.GetField("_password",
10 BindingFlags.NonPublic | BindingFlags.Instance);
11
12 // set the name and the password
13 Login1.UserName = "1";
14 password.SetValue(Login1, "1");
15
16 // invoke te login methde
17 MethodInfo attemptLogin = loginType.GetMethod("AttemptLogin",
18 BindingFlags.NonPublic | BindingFlags.Instance);
19 attemptLogin.Invoke(Login1, null);
20 };
21 #endif
אני מייצר לחצן בזמן ריצה.
מוסיף אותו ל Collection של ה Controls של ה form.
ובזמן לחיצה עליו, אני מקבל את השדה שמייצג את הסיסמא,
עושה השמה לשם ולסיסמא.
מקבל את המתודה שעושה Login
ומפעיל אותה.
קל ופשוט.