簡體   English   中英

會員資格提供商授權

[英]MembershipProvider Authorization

在我的mvc 4 Web應用程序中,我具有用於授權的自定義Membershipprovider。 但是我也不允許對登錄用戶進行授權。 我需要知道是什么原因。 我只實現了ValidateUser方法。 我是否需要實現其他任何重寫的方法? 請幫忙。

如果您需要其他任何信息,請在下面發表評論,我可以提供。

這是我的membershipProvider類

using ABC.DTS.DAO;
using ABC.DTS.DAO.DB;
using ABC.DTS.Utilities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;

    namespace ABC.DTS.Providers
    {

        public class DTSMembershipProvider : MembershipProvider
        {
            public override string ApplicationName
            {
                get
                {
                    throw new NotImplementedException();
                }
                set
                {
                    throw new NotImplementedException();
                }
            }

            public override bool ValidateUser(string username, string password)
            {
                try
                {
                    MemberHandler memberHandler = new MemberHandler();
                    LogFileManager.Instance.GetLogger("event").Debug("DTSMembershipProvider, ValidateUser, Entry, , EmailAddress = " + username + "Password = " + password);

                    LogFileManager.Instance.GetLogger("event").Debug("DTSMembershipProvider, ValidateUser-databaseOpen, Entry, , EmailAddress = " + username);
                    Member user = memberHandler.GetMemberByEmail(username);

                    if (user == null)
                    {

                        LogFileManager.Instance.GetLogger("error").Debug("DTSMembershipProvider, ValidateUser, Error, Invalid Email Address, EmailAddress = " + username + " Password = " + password);
                        return false;
                    }

                    else
                    {
                        if (user.Password == password && user != null)
                        {
                            LogFileManager.Instance.GetLogger("event").Debug("DTSMembershipProvider, ValidateUser, OK, Successful Login, EmailAddress = " + username + "Password = " + password);
                            return true;
                        }

                        else
                        {
                            LogFileManager.Instance.GetLogger("event").Debug("DTSMembershipProvider, ValidateUser, Error, Password Error, EmailAddress = " + username + " Password = " + password);
                            LogFileManager.Instance.GetLogger("error").Debug("DTSMembershipProvider, ValidateUser, Error, Password Error, EmailAddress = " + username + " Password = " + password);
                            return false;
                        }
                    }

                }

                catch (DAOException de)
                {
                    LogFileManager.Instance.GetLogger("event").Debug("DTSMembershipProvider, ValidateUser, Error, " + de.Message + ", EmailAddress = " + username + "Password = " + password);
                    LogFileManager.Instance.GetLogger("error").Debug("DTSMembershipProvider, ValidateUser, Error, " + de.Message + ", EmailAddress = " + username + "Password = " + password);
                    throw de;
                }

                catch (Exception e)
                {
                    LogFileManager.Instance.GetLogger("event").Debug("DTSMembershipProvider, ValidateUser, Error, " + e.Message + ", EmailAddress = " + username + "Password = " + password);
                    LogFileManager.Instance.GetLogger("error").Debug("DTSMembershipProvider, ValidateUser, Error, " + e.Message + ", EmailAddress = " + username + "Password = " + password);
                    throw new DAOException(2002,"Internal Error",e);
                }
            }

            public override bool ChangePassword(string username, string oldPassword, string newPassword)
            {
                throw new NotImplementedException();
            }

            public override bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer)
            {
                throw new NotImplementedException();
            }

            public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
            {
                throw new NotImplementedException();
            }

            public override bool DeleteUser(string username, bool deleteAllRelatedData)
            {
                throw new NotImplementedException();
            }

            public override bool EnablePasswordReset
            {
                get { throw new NotImplementedException(); }
            }

            public override bool EnablePasswordRetrieval
            {
                get { throw new NotImplementedException(); }
            }

            public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords)
            {
                throw new NotImplementedException();
            }

            public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)
            {
                throw new NotImplementedException();
            }

            public override MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords)
            {
                throw new NotImplementedException();
            }

            public override int GetNumberOfUsersOnline()
            {
                throw new NotImplementedException();
            }

            public override string GetPassword(string username, string answer)
            {
                throw new NotImplementedException();
            }

            public override MembershipUser GetUser(string username, bool userIsOnline)
            {
                throw new NotImplementedException();
            }

            public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
            {
                throw new NotImplementedException();
            }

            public override string GetUserNameByEmail(string email)
            {
                throw new NotImplementedException();
            }

            public override int MaxInvalidPasswordAttempts
            {
                get { throw new NotImplementedException(); }
            }

            public override int MinRequiredNonAlphanumericCharacters
            {
                get { throw new NotImplementedException(); }
            }

            public override int MinRequiredPasswordLength
            {
                get { throw new NotImplementedException(); }
            }

            public override int PasswordAttemptWindow
            {
                get { throw new NotImplementedException(); }
            }

            public override MembershipPasswordFormat PasswordFormat
            {
                get { throw new NotImplementedException(); }
            }

            public override string PasswordStrengthRegularExpression
            {
                get { throw new NotImplementedException(); }
            }

            public override bool RequiresQuestionAndAnswer
            {
                get { throw new NotImplementedException(); }
            }

            public override bool RequiresUniqueEmail
            {
                get { throw new NotImplementedException(); }
            }

            public override string ResetPassword(string username, string answer)
            {
                throw new NotImplementedException();
            }

            public override bool UnlockUser(string userName)
            {
                throw new NotImplementedException();
            }

            public override void UpdateUser(MembershipUser user)
            {
                throw new NotImplementedException();
            }
        }
    }

這也是我的控制器課

using ABC.DTS.DAO;
using ABC.DTS.Login;
using ABC.DTS.Models;
using ABC.DTS.Providers;
using ABC.DTS.Utilities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace ABC.DTS.Controllers
{
    public class AuthenticationController : Controller
    {
        //
        // GET: /Authentication/

        public ActionResult Index()
        {
            return View();
        }

        public ActionResult Login(string username, string password, int loginMode)
        {
            GenericModel genericmodel;
            try
            {
                LogFileManager.Instance.GetLogger("event").Debug("AuthenticationController, Login, Entry, , EmailAddress = " + username + "Password = " + password);

                ILoginHandler loginHandler;
                LoginHandlerFactory loginHandlerFactory = new LoginHandlerFactory();

                loginHandler = loginHandlerFactory.GetLoginHandler(loginMode);

                if (loginHandler.Login(username, password))
                {
                    LogFileManager.Instance.GetLogger("event").Debug("AuthenticationController, Login, OK, Successful Login, EmailAddress = " + username + "Password = " + password);
                    genericmodel = new GenericModel(0000, "Successfully logged in");
                    return Json(genericmodel);
                }
                else
                {
                    LogFileManager.Instance.GetLogger("event").Debug("AuthenticationController, Login, Error, Password Error, EmailAddress = " + username + " Password = " + password);
                    LogFileManager.Instance.GetLogger("error").Debug("AuthenticationController, Login, Error, Password Error, EmailAddress = " + username + " Password = " + password);
                    genericmodel = new GenericModel(1001, "Invalid username or password");
                    return Json(genericmodel);
                }
            }
            catch (DAOException de)
            {
                LogFileManager.Instance.GetLogger("event").Debug("AuthenticationController, Login, Error, " + de.Message + ", EmailAddress = " + username + "Password = " + password);
                LogFileManager.Instance.GetLogger("error").Debug("AuthenticationController, Login, Error, " + de.Message + ", EmailAddress = " + username + "Password = " + password);
                genericmodel = new GenericModel(de.Code, de.Message);
                return Json(genericmodel);
            }
            catch (Exception e)
            {
                LogFileManager.Instance.GetLogger("event").Debug("AuthenticationController, Login, Error, " + e.Message + ", EmailAddress = " + username + "Password = " + password);
                LogFileManager.Instance.GetLogger("error").Debug("AuthenticationController, Login, Error, " + e.Message + ", EmailAddress = " + username + "Password = " + password);
                genericmodel = new GenericModel(2002, "Internal Error");
                return Json(genericmodel);
            }
        }

        public ActionResult CheckServer()
        {
            GenericModel _genericModel = new GenericModel(3000, "Server is Live");
            return Json(_genericModel);
        }

        [Authorize]
        public ActionResult IsAuthorized()
        {
            GenericModel _genericModel = new GenericModel(0000, "Authorized");
            return Json(_genericModel);
        }
    }
}

您需要通過以下兩種方法覆蓋最小值:

  • ValidateUser-需要進行驗證。
  • GetUser每當對服務器發出請求時,為了創建IPrincipal對象而調用該方法。

自定義會員資格提供者

public class CustomMembershipProvider : MembershipProvider
{    
   public override bool ValidateUser(string username, string password)
   {            
   }

   public override MembershipUser GetUser(string username, bool userIsOnline)
   {           
   }
}

自定義角色提供者

如果登錄后需要授權 ,則還需要實現角色提供程序。

public class CustomRoleProvider : RoleProvider
{
   public override bool IsUserInRole(string username, string roleName)
   {
   }

   public override string[] GetRolesForUser(string username)
   {
   } 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM