Masquer la valeur param (guid) dans une URL

Dans mon parcours

.when('/user:user_guid',{ templateUrl : 'users/profile.html', controller : 'userController' }) 

Dans mon index.html dans le ng-repeat j'ai

 <a href="#/user/:{{user.user_guid}}">view profile</a> 

Cela fonctionne mais dans mon URL, je vois que le guide a été exposé. Y a-t-il un moyen de le cacher?

Utilisez ng-click

 <a ng-click="go_url(user)">view profile</a> 

Et ensuite dans un contrôleur

 //it has many possible solutions, this is one of them //according to your config, you're using angular route provider $scope.go_url = function(_user){ //be sure to inject $location service $location.path('/user/' + _user.user_guid); } 

Si vous ne souhaitez pas exposer l'URL dans le navigateur, utilisez un service qui peut contenir la variable guid à l'intérieur et saisissez-le lorsque l'utilisateur navigue vers /user


Voici la démo

 angular.module('demo', ['ngRoute']); angular.module('demo').config(function($routeProvider){ $routeProvider .when('/welcome', { templateUrl: 'welcome_page' }) .when('/user', { templateUrl: 'hello_page' }) .otherwise({redirectTo: '/welcome'}); }); angular.module('demo').service('SecretServ', function(){ this.secret_guid = ''; }); angular.module('demo').controller('Controller1', function($scope, $location, SecretServ){ $scope.user = { guid: '123345567234' }; $scope.go = function(){ SecretServ.secret_guid = $scope.user.guid; $location.path('/user'); }; }); angular.module('demo').controller('Controller2', function($scope, SecretServ, $location){ $scope.guid = SecretServ.secret_guid; $scope.exit = function(){ $location.path('/welcome'); } }); 
 <script src="https://code.angularjs.org/1.4.4/angular.js"></script> <script src="https://code.angularjs.org/1.4.4/angular-route.js"></script> <div ng-app="demo"> My app <div ng-view></div> <script id="welcome_page" type="text/ng-template"> <div ng-controller="Controller1"> Welcome<br> To go to private page, click <button ng-click="go()">me</button> </div> </script> <script id="hello_page" type="text/ng-template"> <div ng-controller="Controller2"> Hello {{guid}}, <button ng-click="exit()">exit</button> </div> </script> </div> 

Vous pouvez chiffrer les paramètres de l'URL. Et puis en PHP lorsque vous lisez POST / GET param, vous l'avez décrypté pour la première fois, puis lisez les valeurs. De cette façon, rien n'est exposé. Je l'ai fait pour certains de mes propres projets, et cela fonctionne.