远程登录 DotNetNuke 站点

Log into DotNetNuke site remotely

我正在为 DotNetNuke 7 创建一个简单的 Web 服务,它将允许 iOS 或 Android 应用程序对我们网站的用户进行身份验证,以确保他们是会员并因此被允许在应用程序上查看受限制的内容。

我有一个响应匿名连接的测试网络服务 运行。我如何真正让它登录网站并检索数据(如角色和联系信息)?

public class SiteLoginController : DnnApiController  
{
    [DnnAuthorize]
    [HttpGet]
    public HttpResponseMessage LoginToSite(string username, string password)
    {
        // go log into website
        // if they have an account
        // retrieve role and contact info
        // else
        // return invalid credentials message
    }
}

我在网上看了一段时间,大多数答案似乎都与允许匿名访问有关,而不是真正对用户进行身份验证。

您无需登录即可获取用户信息。虽然我不确定登录部分是否可以通过 Web 服务工作。

UserInfo user = UserController.GetUserByName(username);

if (user != null)
{
    string email = user.Email;
}
else
{
    //user not found
}

或者如果您确实想登录以增加安全性,您可以这样做:

string resultText = string.Empty;

UserLoginStatus loginStatus = new UserLoginStatus();
UserController.UserLogin(PortalId, username, password, null, PortalSettings.PortalName, DotNetNuke.Services.Authentication.AuthenticationLoginBase.GetIPAddress(), ref loginStatus, false);

switch (loginStatus)
{
    case UserLoginStatus.LOGIN_SUCCESS:
        resultText = "OK";
        break;
    case UserLoginStatus.LOGIN_FAILURE:
        resultText = "Failure";
        break;
    case UserLoginStatus.LOGIN_USERLOCKEDOUT:
        resultText = "Locked out";
        break;
    case UserLoginStatus.LOGIN_USERNOTAPPROVED:
        resultText = "Not approved";
        break;
    default:
        resultText = "Unknown error";
        break;
}

老实说,更简单的解决方案是简单地传递用户名和密码作为基本身份验证,使用 [DnnAuthorize] 属性您可以验证用户是否是您想要的用户,然后您可以使用 UserController.GetCurrentUser () 获取登录用户。