使用 API 让用户登录到 spotify

Posted

技术标签:

【中文标题】使用 API 让用户登录到 spotify【英文标题】:Getting Users to login to spotify using the API 【发布时间】:2019-12-03 09:26:00 【问题描述】:

我正在尝试创建一个允许用户在 spotify 上创建首选播放列表的应用程序。我正在使用 spotify web api 并构建一个 asp.net mvc 应用程序 (c#)。我正在尝试发出网络请求让用户登录到他们的 spotify 帐户,但由于某种原因,每当我尝试获得响应时,我的应用程序都不会重定向到登录页面。

我自己尝试过创建重定向链接,但 GetResponse() 方法不应该调用重定向本身吗?我是新手,所以我可能错了,但我们将不胜感激。

public IActionResult GetLogin()
    
        string spotifyURL = "https://accounts.spotify.com/authorize/";
        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(spotifyURL);

        webRequest.Method = "GET";
        webRequest.Headers["client_id"] = clientID;
        webRequest.Headers["response_type"] = "code";
        webRequest.Headers["redirect_uri"] = "https://localhost:44383/home/login";

        string json = "";
        using (HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse())
        
            using (Stream stream = response.GetResponseStream())
            
                using (StreamReader rdr = new StreamReader(stream, Encoding.UTF8))
                
                    //should get back a string i can then turn to json and parse for accesstoken
                    json = rdr.ReadToEnd();
                    rdr.Close();
                
            
        

        bool authorized = true;
        if (authorized)
        
            return View("Callback");// token.access_token;
        
        else
        
            return View("Home");
        


    

【问题讨论】:

【参考方案1】:

据我了解,您正在尝试在 spotify 上 authentificate

我可以告诉你,你在使用GET 方法和authentificate 时有一些错误 - 该服务会在JSON 中等待您的POST,其中包含登录名和密码等帐户数据,如果登录名和密码以及格式正确,它将返回一个带有访问令牌的JSON

如何添加 Header 格式: Headers.Add(HttpRequestHeader.ContentType = "application/json"); 在此之后,服务器将了解您实际发送给它的内容。

关于代码的最后部分:

bool authorized = true;
        if (authorized)
        
            return View("Callback");// token.access_token;
        
        else
        
            return View("Home");
        

你像空白一样返回Views这里最好使用

return RedirectToAction("ActionName", "CpntrollerName", new  "Here you can pass any value" );

这将允许您重定向到另一个 ControllerView 并向其传递一个值。

总结是: 我可以写很长时间,但更好地告诉你应该阅读更多关于如何在 C# 应用程序中使用 API 的真正问题。

在这里,我将提供一些有关 MS 文档的链接:

WebRequest 方法:link

HttpClient 方法:link

关于 HttpClient 我建议只在桌面或移动应用程序上使用它,因为它继承自 .NET Framework 而不是 .NET Core 所以它可能会导致错误,但我没有在我的 ASP.NET Core 上进行测试应用程序,所以不能确定。

小提示:

使用Newtonsoft.Json 它将帮助您序列化您的 JSON 请求并反序列化答案,这比用手或正则表达式更容易。

在向 Web 发出请求时使用 asyncTask,因为可能会等待很长时间,并且您不希望您的应用在等待响应之前一直冻结。

【讨论】:

感谢您的帮助!但是我不明白为什么我需要使用 POST 方法来调用身份验证端点?根据已发布的 spotify 授权代码流 (developer.spotify.com/documentation/general/guides/…),身份验证端点是一个 GET 调用,据我了解,我不需要获取用户的登录名和密码,Spotify 服务应该要求这样做吗?跨度> @fullstackmamba 我明白了,它使用内部注册的应用程序并根据它为您提供一个令牌。然后你应该使用Bearer 标头,它在大多数情况下都包含访问令牌。我建议您发布,因为在大多数情况下,如果您构建自己的 API 或使用其他 API,它需要您提供一些数据,例如登录名和密码,这只是解释 API 在大多数情况下如何工作的一部分。在您的情况下,您需要像这样设置GetRequest 的标题:myHttpWebRequest.Headers.Add("Authorization", "Bearer " + AccessToken);

以上是关于使用 API 让用户登录到 spotify的主要内容,如果未能解决你的问题,请参考以下文章

如何知道 Spotify 中的登录状态

在 iPhone 中保存 Spotify 登录的用户会话

如何使用 spotify web api 获取用户的播放列表列表?

如何使用 Spotify API 和 Spotify SDK [关闭]

Spotify Web API - 登录后如何扩展权限范围?

C# Windows Forms Spotify API 用户授权