|
get '/login' do |
|
state = SpotifyAuth.generate_state |
|
session[:state] = state |
|
logger.info("state: #{state}") |
|
redirect SpotifyAuth.login_url(state) |
|
#<localhost>/login -> é o path correto para garantir os parametros. |
|
#Apos a autorizacao |
|
#https://getaccess/callback?code=AQD6-e_Kj7ltUvJz8T7yvoU-dk8rC6e-ZH_5FX4L2wtMJ86tQ1B1myFUj5E48ez7DUXqXx0t8nnI5QAdlc4073fwgsHVldIqq7YoekfX-flvLpUhdGB9bEzoRznhFLs-Li-BH4xmPCYTbAnoVXe7tNU5F2XtgkOr6EwncNV55bN7dPPHG_VAprxLMVXS_X-vZdJUwd0CkGEDShsFk7DHUNrz&state=441f6aa7fb707163 |
|
end |
|
|
|
#Cria a url de <callback> para coelta do acces_token e informacoes necessarias como na Documentacao. |
|
get '/callback' do |
|
if params[:state] != session[:state] |
|
logger.error("state Session #{session[:state]} \n state params #{params[:state]}") |
|
halt 400, "State mismatch" |
|
end |
|
|
|
#Faz as trocas de dos codigos de autorizacao pelos token de acesso. |
|
begin |
|
tokens = SpotifyAuth.fetch_token(params[:code]) |
|
logger.info("Acces_Token: #{tokens['access_token']}") |
|
session[:access_token] = tokens['access_token'] |
|
"Token de acesso: #{tokens['access_token']}" |
|
rescue RestClient::ExceptionWithResponse => e |
|
logger.error("Failed to obtain token: #{e.response}") |
|
status e.http_code |
|
"Falha ao obter o token: #{e.response}" |
|
end |
|
end |
|
|
|
get '/profile' do |
|
acces_token = session[:acces_token] |
|
|
|
if acces_token.nil? |
|
redirect '/login' |
|
else |
|
#Chama a API |
|
begin |
|
user_info =RestClient.get('https://api.spotify.com/v1/me', { |
|
Authorization: "Bearer #{access_token}" |
|
}) |
|
|
|
#chama a api para coletas as informacoes do user |
|
playlists = RestClient.get('https://api.spotify.com/v1/me/playlists', { |
|
Authorization: "Bearer #{access_token}" |
|
}) |
|
|
|
user_info_json =JSON.parse(user_info.body) |
|
playlists_json =JSON.parse(playlists.body) |
|
|
|
erb :profile, locals: { user_info: user_info_json, playlists: playlists_json } |
|
rescue RestClient::ExceptionWithResponse => e |
|
logger.error("Failed to fetch user info or playlists: #{e.response}") |
|
"Erro ao obter informações do usuário ou playlists: #{e.response}" |
|
end |
|
end |
|
end |
Tests_Rest_Client/SpotifyAPI/auth.rb
Lines 54 to 110 in 2409f25
O bug acontece logo após a autorização via Spotify, por alguma motivo a URL retornada junto com o "callback" não é a esperada, é retornada com um parâmetro de "code=..." e não o "access_token=...".
Para remediar isso vou realizar os acessos via chrome padrão e não dentro do meu projeto.