Diễn đàn    Các Projects Dotnetnuke (DNN)    dotnetnuke login như thế nào? Ko ai tìm thấy code login của DNN (vì nó do Microsoft viết)

Thành viênTrả lời
tieuphu

Thống chế Erich von Manstein
51  bài
19-10-2008 22:58:17
Kỳ quặc cực kỳ luôn.


Chúng ta đăng nhập username và password, hệ thống sẽ thực hiện như sau:

AspNetMembershipProvider (DNN)

System.Web.Security.Membership.ValidateUser(username, password); (MS)

System.Web.Security.MembershipProvider.ValidateUser(username, password); (MS)

System.Web.Security.SqlMembershipProvider.GetPasswordWithFormat(username, password) (MS)

trong thằng cuối cùng nó gọi stored procedure

SqlCommand command = new SqlCommand("dbo.aspnet_Membership_GetPasswordWithFormat", connection.Connection);
command.CommandTimeout = this.CommandTimeout;
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(this.CreateInputParam("@ApplicationName", SqlDbType.NVarChar, this.ApplicationName));
command.Parameters.Add(this.CreateInputParam("@UserName", SqlDbType.NVarChar, username));
command.Parameters.Add(this.CreateInputParam("@UpdateLastLoginActivityDate", SqlDbType.Bit, updateLastLoginActivityDate));
command.Parameters.Add(this.CreateInputParam("@CurrentTimeUtc", SqlDbType.DateTime, DateTime.UtcNow));
parameter = new SqlParameter("@ReturnValue", SqlDbType.Int);

Kỳ lạ là làm sao code của MS, mà thằng DNN biết tất cả những cái đó và viết 1 cái stored có tên như vậy trong DB của mình.

Nó như sau:


------------------------------
CREATE PROCEDURE dbo.aspnet_Membership_GetPasswordWithFormat
@ApplicationName nvarchar(256),
@UserName nvarchar(256),
@UpdateLastLoginActivityDate bit,
@CurrentTimeUtc datetime
AS
BEGIN
DECLARE @IsLockedOut bit
DECLARE @UserId uniqueidentifier
DECLARE @Password nvarchar(128)
DECLARE @PasswordSalt nvarchar(128)
DECLARE @PasswordFormat int
DECLARE @FailedPasswordAttemptCount int
DECLARE @FailedPasswordAnswerAttemptCount int
DECLARE @IsApproved bit
DECLARE @LastActivityDate datetime
DECLARE @LastLoginDate datetime

SELECT @UserId = NULL

SELECT @UserId = u.UserId, @IsLockedOut = m.IsLockedOut, @Password=Password, @PasswordFormat=PasswordFormat,
@PasswordSalt=PasswordSalt, @FailedPasswordAttemptCount=FailedPasswordAttemptCount,
@FailedPasswordAnswerAttemptCount=FailedPasswordAnswerAttemptCount, @IsApproved=IsApproved,
@LastActivityDate = LastActivityDate, @LastLoginDate = LastLoginDate
FROM dbo.aspnet_Applications a, dbo.aspnet_Users u, dbo.aspnet_Membership m
WHERE LOWER(@ApplicationName) = a.LoweredApplicationName AND
u.ApplicationId = a.ApplicationId AND
u.UserId = m.UserId AND
LOWER(@UserName) = u.LoweredUserName

IF (@UserId IS NULL)
RETURN 1

IF (@IsLockedOut = 1)
RETURN 99

SELECT @Password, @PasswordFormat, @PasswordSalt, @FailedPasswordAttemptCount,
@FailedPasswordAnswerAttemptCount, @IsApproved, @LastLoginDate, @LastActivityDate

IF (@UpdateLastLoginActivityDate = 1 AND @IsApproved = 1)
BEGIN
UPDATE dbo.aspnet_Membership
SET LastLoginDate = @CurrentTimeUtc
WHERE UserId = @UserId

UPDATE dbo.aspnet_Users
SET LastActivityDate = @CurrentTimeUtc
WHERE @UserId = UserId
END


RETURN 0
END

GO
-----------------------------
 
tieuphu

Thống chế Erich von Manstein
51  bài
19-10-2008 23:12:38
Điều buồn cười nhất đó là :

lấy data từ giao diện xuống là nhiệm vụ DNN, truyền param vào câu Query để đọc trong DB ra và so sánh lại là của Microsoft (MS) thực hiện.

Thế mới kỳ chứ, bình thường nếu là SP chúng ta viết từ đầu thì mấy cái dòng lệnh đọc từ DB ra rồi so sánh có phải khó khăn gì lắm đâu mà 2 chú DNN và MS phải Provider này nọ lòng vòng nhiều thế không biết.

Toàn bộ tài liệu mô tả chi tiết về

Membership Providers

tại đây:

http://msdn.microsoft.com/en-us/library/aa478949.aspx

Cho nên bất cứ ai muốn đọc code DNN tìm ra xem chỗ nào là chỗ check user login thì sẽ không tìm thấy đâu vì đó là do microsoft viết chứ không phải DNN


---
Miệt mài, miệt mài ...
http://awas.vn
 
tieuphu

Thống chế Erich von Manstein
51  bài
19-10-2008 23:58:37
Đây là bài hướng dẫn

http://www.codeproject.com/KB/aspnet/ASPNET_Membership_1.aspx

Nhưng mà làm đúng như họ bảo thì sẽ bị lỗi sau

Could not find stored procedure 'dbo.aspnet_CheckSchemaVersion'.

Để sửa lỗi này vào thư mục

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

xem các file .sql mà run là OK

InstallCommon.sql
InstallMembership.sql
InstallPersistSqlState.sql
InstallPersonalization.sql
InstallProfile.SQL
InstallRoles.sql
InstallSqlState.sql
InstallSqlStateTemplate.sql
InstallWebEventSqlProvider.sql

Nhưng mà túm lại 1 câu để được sướng phức tạp quá, tự viết code cho nó khỏe, khỏi phải cài đặt linh tinh mệt người.



---
Miệt mài, miệt mài ...
http://awas.vn
 
thanthoai2114


0  bài
22-9-2009 15:27:5
Ứng dụng đoạn này mà đăng nhập bác này....Nhẹ như lông hồng luôn...Mới tìm ra quá sướng he he...
try
{
//validate username/password combination
DotNetNuke.Entities.Users.UserInfo myUser = new DotNetNuke.Entities.Users.UserInfo();
DotNetNuke.Security.Membership.UserLoginStatus userLoginStatus = new DotNetNuke.Security.Membership.UserLoginStatus();
myUser = DotNetNuke.Entities.Users.UserController.ValidateUser(myPortal, myUsername, myPassword, "", "", "", ref userLoginStatus);

if (userLoginStatus == DotNetNuke.Security.Membership.UserLoginStatus.LOGIN_SUCCESS ||
userLoginStatus == DotNetNuke.Security.Membership.UserLoginStatus.LOGIN_SUPERUSER)
{
//login the user ...
DotNetNuke.Entities.Users.UserController.UserLogin(PortalId, myUser, "", "", true);
}
else
{
...
}
}
catch
{
...
}
---
 
dvcsun


7  bài
6-11-2009 22:12:56
Đây là bài hướng dẫn

http://www.codeproject.com/KB/aspnet/ASPNET_Membership_1.aspx

Nhưng mà làm đúng như họ bảo thì sẽ bị lỗi sau

Could not find stored procedure 'dbo.aspnet_CheckSchemaVersion'.

Để sửa lỗi này vào thư mục

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

xem các file .sql mà run là OK

InstallCommon.sql
InstallMembership.sql
InstallPersistSqlState.sql
InstallPersonalization.sql
InstallProfile.SQL
InstallRoles.sql
InstallSqlState.sql
InstallSqlStateTemplate.sql
InstallWebEventSqlProvider.sql

Nhưng mà túm lại 1 câu để được sướng phức tạp quá, tự viết code cho nó khỏe, khỏi phải cài đặt linh tinh mệt người.



Sướng như thằng MS là nó fải dùng cái ASP.NET Configuration tool của nó

---
 

Chủ đề gần đây :

Cùng loại :

Tên file Mô tả chi tiết Ngày
NWeb.zip (1) Module đơn giản Newsweb trên Dotnetnuke v10.x.x.x10/18/2025 8:08:11 AM
vspforum.zip (11) Ma nguon vspforum ngay xua4/18/2023 6:38:37 AM
pdfjs.rar (2) pdfjs 2017 : hiển thị tốt trên iphone 11, 12, 13 không lỗi, bản 2012 sẽ lỗi trên iphone6/21/2022 11:52:48 AM
pdfjs2.rar (2) Xem file pdf bằng viewer.hml cua pdfjs (thư viện chuẩn mozilla) 2012. https://mozilla.github.io/pdf.js/getting_started/#download có thể download bản prebuild tại đây6/21/2022 11:52:04 AM
runner.zip (0) using three.js, orbitcontrol to view an object move random on map. Di chuyển 1 đồ vật ngẫu nhiên trên bản đồ, sử dụng với demo nhân viên di chuyển trong văn phòng. Toàn js download về là chạy12/5/2019 5:55:14 PM
gmap.zip (1) google map + marker7/17/2019 2:25:05 PM
vinsmarthomeservice.zip (1) java post json to api, use AsyncTask, event listener7/9/2019 5:00:10 PM
fblogin.zip (0) Login facebook bang javascript SDK7/9/2019 9:16:37 AM
autocomplete-location.zip (2) autocomplete location geo from google place, html + js7/4/2019 4:37:55 PM
WebAPI.zip (8) api for android access db (v1.0.0)7/4/2019 9:14:17 AM