Получение токена доступа Spotify с помощью spotipy на Django и Python
Я новичок в Django и пытаюсь связать Spotify с моим webapp. Я использую Spotify для этого, и он правильно получает доступ к Spotify.
Для этого у меня есть кнопка, которая открывает вид ниже
views.py
@authenticated_user
def spotify_login(request):
sp_auth = SpotifyOAuth(client_id=str(os.getenv('SPOTIPY_CLIENT_ID')),
client_secret=str(os.getenv('SPOTIPY_CLIENT_SECRET')),
redirect_uri="http://127.0.0.1:8000/",
scope="user-library-read")
redirect_url = sp_auth.get_authorize_url()
auth_token = sp_auth.get_access_token()
print(auth_token)
print("----- this is the AUTH_TOKEN url -------", auth_token)
return HttpResponseRedirect(redirect_url)
Если я не использую auth_token = sp_auth.get_access_token(), все работает нормально, и я получил правильное перенаправление. К сожалению, если я добавляю эту строку кода для доступа к маркеру доступа, вместо того, чтобы оставаться на той же странице, она открывает другую вкладку в браузере с кодом Spotify auth_code и позволяет исходной странице загружаться вечно.
Есть ли способ получить маркер доступа в фоновом режиме, не заставляя мой просмотр перезагружаться или открывать другую вкладку в браузере?
Вы перенаправляетесь именно туда, куда вы говорите django идти.
redirect_url - это просто перенаправление spotify api, содержащее код, который перехватывается и используется для получения маркера доступа.
Установите ожидаемый ответ в качестве возвращаемого значения.
Кстати, имейте в виду:
- redirect_uri="http://127.0.0.1:8000/", должен быть добавлен в приложении spotify (обычно как http://127.0.0.1:8000/callback",)
- auth_token - это json, вы можете найти токен в auth_token['access_token']
Решением было создание нового представления для доступа к URL
views.py
@authenticated_user
def spotify_login(request):
#cerca nel json
my_loaded_dict = {}
with open('spotify_auth.json', 'r') as f:
try:
my_loaded_dict = json.load(f)
except:
pass
if str(request.user.username) in my_loaded_dict:
messages.error(request, "You have already linked your Spotify account")
return HttpResponseRedirect('account/' + str(request.user.username))
sp_auth = oauth2.SpotifyOAuth(client_id=str(os.getenv('SPOTIPY_CLIENT_ID')),
client_secret=str(os.getenv('SPOTIPY_CLIENT_SECRET')),
redirect_uri="http://127.0.0.1:8000/members/spotify_callback",
scope="user-library-read")
redirect_url = sp_auth.get_authorize_url()
return HttpResponseRedirect(redirect_url)
@authenticated_user
def spotify_callback(request):
full_path = request.get_full_path()
parsed_url = urlparse(full_path)
spotify_code = parse_qs(parsed_url.query)['code'][0]
data = {
str(request.user.username): spotify_code
}
with open('spotify_auth.json', 'w') as f:
json.dump(data, f)
messages.success(request, "You have correctly linked your Spotify account")
return HttpResponseRedirect('account/' + str(request.user.username))
urls.py
urlpatterns = [
path('account/<str:username>/', views.account_user, name="account"),
path('spotify_login', views.spotify_login, name="spotify_login"),
path('spotify_callback', views.spotify_callback, name="spotify_callback"),
]
Код также сохраняет токен в JSON и ищет его, если он уже был сохранен