Auth0 LoginAsync错误

时间:2018-07-09 10:06:26

标签: c# auth0

我必须执行Auth0身份验证过程并提取令牌。

我有 Authenticator 类别,如下所示-

class Auth0Authenticator
{
    public Auth0Authenticator() { performAuthentication(); }
    public void performAuthentication()
    {
        Auth0Client auth0Client = new Auth0Client(new Auth0ClientOptions()
        {
            Domain = "mydomain",
            ClientId = "clientid",
        });

        var extraParameters = new Dictionary<string, string>();
        extraParameters.Add("connection", "parameter");

        var result = auth0Client.LoginAsync(extraParameters: extraParameters);
    }
}

在执行 LoginAsync 时出现错误-调用线程必须是STA,因为许多UI组件都需要STA。

即使在创建STA线程或添加属性[STAThread]后也无济于事。

当我在一个基于对话框的简单应用程序中执行相同的代码时,代码成功地向我返回了令牌。但是将相同的代码放入我的项目中(由MFC / C#/ CLI组成)会引发错误。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

这可能是XY problemAuth0Client.LoginAsync是一个异步API,您正在尝试在类的构造函数中调用它。如果在执行功能之前有一些代码依赖于该功能,则可能会产生负面影响。

重构代码以遵循建议的语法

public class Auth0Authenticator {

    public Auth0Authenticator() { 
        //Subscribe to the event
        autoAuthenticate +=  onAutoAuthenticating(); 
        //raise event to allow async operation.
        autoAuthenticate(this, EventArgs.Empty);
    }

    private event EventHandler autoAuthenticate = delegate { };
    private async void onAutoAuthenticating(object sender, EventArgs args) {
        await PerformAuthenticationAsync();
    }

    public async Task PerformAuthenticationAsync() {
        Auth0Client auth0Client = new Auth0Client(new Auth0ClientOptions() {
            Domain = "mydomain",
            ClientId = "clientid",
        });

        var extraParameters = new Dictionary<string, string>();
        extraParameters.Add("connection", "parameter");

        var result = await auth0Client.LoginAsync(extraParameters: extraParameters);

        //...do something with the result as needed

        string access_token = result.AccessToken;
        string refresh_token = result.RefreshToken;

        //...
    }
}