当前位置: 首页 > 知识库问答 >
问题:

Spotify 身份验证流程 (Spotify API)

孙夕
2023-03-14

我试图允许用户使用Spotify登录(使用Spotipy库),以提供在其帐户上创建播放列表并填充播放列表的身份验证。用户登录后,我将通过嵌入式Spotify播放器(使用新创建的播放列表的播放列表ID)显示他们刚刚在重定向模板中创建的播放列表。

我的HTML模板中有一个表单输入框,接受用户的输入(他们的Spotify用户名)。我还有一个Spotify URIs的列表,可以用来填充播放列表。

我按照Spotipy文档中关于为用户获取令牌进行身份验证的内容进行了如下操作(我已经删除了我的客户端id

import os
import spotipy
import spotipy.util as util
from json.decoder import JSONDecodeError
from datetime import date

@login_required
def save_playlist(request, data='Default_Data'):

    username = data.split('/')[0] #spotify username
    track_ids = data.split('/')[1:11] #list of spotify IDs for playlist tracks
    client_id =  '****'
    client_secret = '****'
    scope = 'playlist-modify-public, playlist-modify-private'
    redirect_uri = 'http://127.0.0.1:8000/save_playlist/'

    #check if username is already in cache, if not, create cache 
    try:
        token = util.prompt_for_user_token(username, 
            scope=scope,client_id=client_id, 
            client_secret=client_secret,redirect_uri=redirect_uri)
    except (AttributeError, JSONDecodeError):
        os.remove(f".cache-{username}")
        token = util.prompt_for_user_token(username, 
            scope=scope,client_id=client_id, 
            client_secret=client_secret,redirect_uri=redirect_uri)


    sp=spotipy.Spotify(auth=token)
    today = date.today()
    date_string = (str(today.day) + ' - ' + str(today.month) + ' - ' + str(today.year))

    #playlist title
    playlist_name = f"GENIE - " + username + ' | ' + date_string
    #create a new public playlist to be populated
    sp.user_playlist_create(username, name=playlist_name, public=True)
    #id of playlist we just created
    playlist_id = sp.current_user_playlists(limit=1)['items'][0]['id']
    #add playlist tracks to this playlist
    sp.user_playlist_add_tracks(username,playlist_id,tracks=track_ids)

    return render(request, 'blog/save_playlist.html', {'playlist_id':playlist_id})

当用户输入用户名并登录Spotify时,会弹出多个窗口,而不仅仅是一个窗口(见下面的终端)。我认为问题出在获得代币上。

尝试登录时的终端输出

我已经把Spotify开发者控制台中的重定向URI设置为和上面一样(' http://127 . 0 . 0 . 1:8000/save _ playlist/')。

提前谢谢!

共有3个答案

墨翔宇
2023-03-14

与其使用Spotipy,一个快速的解决方案是转到https://pypi.org/project/spotify-token/,它是一个Python脚本,如果提供了Spotify用户名和密码,它可以生成Spotify令牌。

话虽如此,但请记住,不是每个人都愿意提供他们的用户名和密码。干杯!

袁河
2023-03-14

尝试一下OAuth请求-oautlibhttps://requests-oauthlib.readthedocs.io/en/latest/examples/spotify.html它就像一个魅力。

曹成双
2023-03-14

< code > util . prompt _ for _ user _ token 不应在允许任何用户登录的web应用程序中使用,因为我们事先不知道用户的ID/名称。只是本地快速上手的帮手。

相反,您应该通过为用户指定唯一的缓存路径来直接使用 spotipy.oauth2.SpotifyOAuth。对于 Web 应用,它将是会话 ID。

这是一个为Flask制作的完整示例,您可以根据自己的需要进行调整https://github . com/PLA mere/spot ipy/blob/master/examples/app . py

 类似资料:
  • 本文向大家介绍asp.net mvc中Forms身份验证身份验证流程,包括了asp.net mvc中Forms身份验证身份验证流程的使用技巧和注意事项,需要的朋友参考一下 验证流程 一、用户登录 1、验证表单:ModelState.IsValid 2、验证用户名和密码:通过查询数据库验证 3、如果用户名和密码正确,则在客户端保存Cookie以保存用户登录状态:SetAuthCookie     1

  • 身份验证 PDF版下载 企业应用中的URL链接可以通过OAuth2.0验证接口来获取员工的身份信息。 通过此接口获取员工身份会有一定的时间开销。对于频繁获取员工身份的场景,建议采用如下方案: 企业应用中的URL链接直接填写企业自己的页面地址; 员工跳转到企业页面时,企业校验是否有代表员工身份的cookie,此cookie由企业生成; 如果没有获取到cookie,重定向到OAuth验证链接,获取员工

  • 我正在尝试向登录Spotify发送身份验证请求。 这是由javascript XMLHttpRequest通过本地主机运行的。然而,我收到的只是一条错误消息,指出: XMLHttpRequest无法加载https://accounts.spotify.com/authorize/?q=undefined 请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许

  • 问题内容: 我正在尝试在Node.js中使用Socket.IO,并试图允许服务器为每个Socket.IO客户端赋予一个身份。由于套接字代码不在http服务器代码的范围内,因此无法轻松访问已发送的请求信息,因此我假设在连接期间需要将其发送出去。什么是最好的方法 1)将有关谁通过Socket.IO连接到服务器的信息 2)验证他们说的是谁(如果正在使事情变得更容易,我目前正在使用Express) 问题答

  • 我试图使用swift代码在网站上找到这里,但响应是html代码与两个错误:“您必须输入密码!”和“您必须输入用户名!”我是NSURLSession的新手,试图更改用于身份验证的字符串,但无法更改响应。下面是我的代码: 这是控制台响应中的内容:

  • 我正在开发一个具有自己的身份验证和授权机制的REST应用程序。我想使用JSON Web Tokens进行身份验证。以下是有效且安全的实现吗? < li >将开发一个REST API来接受用户名和密码并进行认证。要使用的HTTP方法是POST,因此没有缓存。此外,在传输时还会有安全SSL < li >在认证时,将创建两个JWTs访问令牌和刷新令牌。刷新令牌将具有更长的有效期。这两个令牌都将写入coo