La première étape de l'authentification de Sina guidera l'utilisateur pour ouvrir une page, puis l'url sera redirigée vers le répertoire racine du site Web une fois que l'utilisateur l'aura autorisé. Le problème est le suivant :
L'URL aura un paramètre de code et le lien deviendra XXX.XXX.com/?code=XXXX. Lorsque htmlMode # $locationProvider.html5Mode(false) n'est pas utilisé, l'itinéraire passera à XXX.XXX. com/?code=XXXX#/
Existe-t-il un bon moyen d'obtenir la valeur de ce code (actuellement en utilisant $window.location.search, car $location.search ne peut pas obtenir cette valeur dans ce mode
) ;Existe-t-il un bon moyen de supprimer ce XXX.XXX.com/?code=XXXX#/ ?code=XXX (s'il n'est pas supprimé, chaque lien de saut d'itinéraire sera là)
Ma solution temporaire aux deux problèmes ci-dessus consiste à remplacer $window.location.href, ce qui entraînera l'actualisation de la page entière (heureusement, il s'agit de la connexion à la page d'accueil,
C'est acceptable, mais j'ai l'impression qu'il devrait y avoir une utilisation plus avancée et angulaire)
Adresse de test http://llovebaimuda.herokuapp.com/ http://llovebaimuda.herokuapp.com/#/login#/login
Le mode HTML5 n'est pas utilisé car si vous saisissez directement l'url (par exemple : http://llovebaimuda.herokuapp.com/phone)会导致404,输入téléphone), cela provoquera 404. Saisissez
http://llovebaimuda.herokuapp.com/#/phone虽然浏览器显示http://llovebaimuda.herokuapp.com/phone,但是#/téléphone Bien que le navigateur affiche
téléphone, mais.
Existe-t-il un moyen pour Angular d'utiliser <script></script> directement dans la page. Par exemple, le composant de connexion Sina Weibo est un js, qui sera chargé sur la page
Ensuite, effectuez un traitement sur un dom. L'opération d'Angular sur le dom est dans la directive, puis compilée et liée. Bref, c'est le widget js de connexion de Sina
https://oauth.io/这个木有微博啊Il n’existe pas d’OAuth relativement mature et réutilisable dans Angular (en Chine comme Sina Weibo, QQ, Douban),
oauth nécessite les étapes suivantes :
1. Guidez les utilisateurs pour autoriser et obtenir le codeaccess_token
2. Lancez activement une demande sur le site oauth et obtenez access_token
Cette étape doit être transparente pour l'utilisateur. Maintenant, mon idée est de laisser la page passer activement à une page avec authService. Cet authService obtient activement les données nécessaires, puis enregistre
if 'code' of param_dict
$window.location.href = href + '#' + DEFAULT_URL
'use strict'https://oauth.io/
STATIC_URL = '/static'
DEFAULT_URL = '/phones'
phonecatApp = angular.module('phonecatApp', [
'ngRoute'
'ConfigServices'
'phonecatControllers'
'authControllers'
'phonecatServices'
'phonecatFilters'
'phonecatAnimations'
])
phonecatApp.config([
'$routeProvider'
'$locationProvider'
($routeProvider, $locationProvider, config) ->
$routeProvider
.when('/',{})
.when('/login',{
templateUrl: STATIC_URL + '/partials/auth/login.html'
controller: 'LoginCtrl'
})
.when('/auth/:code',{
})
.when('/phones', {
templateUrl: STATIC_URL + '/partials/phone/list.html'
controller: 'PhoneListCtrl'
})
.when('/phones/:phoneId', {
templateUrl: STATIC_URL + '/partials/phone/detail.html'
controller: 'PhoneDetailCtrl'
})
# Catch all
.otherwise({redirectTo: 'DEFAULT_URL'})
# Without server side support html5 must be disabled.
$locationProvider.html5Mode(false)
])
parse_query_dict = (query) ->
query = query.trim()
if query.length <= 1
return {}
query = query.substring(1)
query_dict = {}
list = query.split('&')
for q in list
k_v = q.split('=')
query_dict[k_v[0]] = k_v[1]
return query_dict
phonecatApp.run([
'$rootScope'
'$route'
'$location'
'$window'
($rootScope, $route, $location, $window) ->
$rootScope.$on('$locationChangeStart', (event, next, current) ->
if not $rootScope.user
if $location.path() == '/'
params = $window.location.search
if params
href = $window.location.href
href = href.replace(params,'')
param_dict = parse_query_dict(params)
if 'code' of param_dict
$window.location.href = href + '#' + DEFAULT_URL
# no logged user, we should be going to #login
if next.templateUrl == "partials/login.html"
# already going to #login, no redirect needed
else
# not going to #login, we should redirect now
#$location.path "/login"
)
])
Permettez-moi de répondre à la première question :
Pour supprimer ?code=XXX, l'utilisation de location.href actualisera définitivement la page. Utilisez plutôt window.pushState.
Référence : MDN : Manipulation de l'historique du navigateur
Solution inter-domaines AngularJs Sina Weibo