首页 > 解决方案 > 如何验证凭据提供程序

问题描述

给定用户和密码的组合,我想确定这会导致UsernamePasswordCredentials对已知的远程 git 服务器有效。

理想情况下,无论是否发生本地结帐,我都希望能够做到这一点。

我试过的是这个。我有一个具有以下方法的类

    private CredentialsHandler UserPassCredentialsProvider
    {
        get
        {
            if (_gitPass == null)
                throw new System.Exception("No git Credentials have been supplied");

            var credentials = new UsernamePasswordCredentials()
            {
                Username = _gitUser,
                Password = _gitPass
            };

            return (_url, _usr, _cred) => credentials;
        }
    } 


    public bool CheckCredentials()
    {
        try
        {  
            using (var repo = new Repository(Path.Combine(WorkingCopyRoot, "MyRepo")))
            {
                IEnumerable<Reference> refs = Repository.ListRemoteReferences(Path.Combine(WorkingCopyRoot, "MyRepo"), UserPassCredentialsProvider);

                return refs != null;
            }
        }
        catch(Exception ex)
        {
            return false;
        }
    }

这只是我在撰写本文时所拥有的代码——我已经对此进行了一段时间的修改,但是,ListRemoteReferences()无论是否使用有效密码,它似乎都可以正常工作。

实现我想要的东西似乎并不简单 - 任何人有什么建议吗?

标签: libgit2sharp

解决方案


我非常接近。通过将路径从本地切换到远程,我能够让它按我的意愿工作。在下面的代码中RepoRoot是一个 URL。

public bool CheckCredentials()
{
    try
    {
        IEnumerable<Reference> refs = Repository.ListRemoteReferences(Path.Combine(RepoRoot, "MyRepo"), UserPassCredentialsProvider);

        return refs != null;
    }
    catch (Exception ex)
    {
        return false;
    }
}

推荐阅读