2017-02-05 2 views
2

Я пытаюсь создать систему входа, но я хочу, чтобы сеанс можно было взять из кода PHP. Если вход в систему равен false или null, он будет перенаправлен на страницу входа. Вот мой запустить AngularJS код:Как получить сеанс из PHP в AngularJS для перенаправления

app.run(["$rootScope", 'adminService', '$location', function($rootScope, adminService, $location) { 
    $rootScope.$on("$routeChangeStart", function() { 
     $location.path('/login'); 
    }); 
}]); 

код маршрутизации:

app.config(function($routeProvider){ 
    $routeProvider.when('/', { 
     templateUrl: 'welcome.html' 
    }).when('/administrator', { 
     templateUrl: './part/administrator.html', 
     controller: 'adminPageControl' 
    }).when('/administrator/:id_admin', { 
     templateUrl: './part/addit-administrator.html', 
    }).when('/alternatif', { 
     templateUrl: './part/alternatif.html', 
     controller: 'alternatifPageControl' 
    }).when('/alternatif/:id_alternatif', { 
     templateUrl: './part/addit-alternatif.html' 
    }).when('/skala', { 
     templateUrl: './part/skala.html', 
     controller: 'skalaPageControl' 
    }).when('/skala/:id_skala', { 
     templateUrl: './part/addit-skala.html' 
    }).when('/kriteria', { 
     templateUrl: './part/kriteria.html', 
     controller: 'kriteriaPageControl' 
    }).when('/kriteria/:id_kriteria', { 
     templateUrl: './part/addit-kriteria.html' 
    }).when('/klasifikasi', { 
     templateUrl: './part/klasifikasi.html', 
     controller: 'klasifikasiPageControl' 
    }).when('/klasifikasi/:id_klasifikasi', { 
     templateUrl: './part/addit-klasifikasi.html' 
    }).when('/analisis', { 
     templateUrl: './part/topsis.php', 
     controller: 'analisisPageControl' 
    }).when('/login', { 
     templateUrl: './login.html' 
    }).when('/logout', { 
     template: 'logout' 
    }).otherwise({ 
     redirectTo: '/' 
    }); 
}); 

PHP код функции сеанса:

function logincheck(){ 
    return $_SESSION['authid']; 
} 

logincheck(); 
+1

Вы должны создать уникальный маркер сеанса в вашем внутреннем интерфейсе без разбора состояния PHP-Session непосредственно в ваш клиент , Помните, что AngularJS предназначен для SPA. Таким образом, ваш клиент связывается с бэкэнд с помощью API. Например, RESTful API. После того, как пользователь выполнил вход через клиент, верните уникальный токен сеанса клиенту. Поместите и подтвердите этот токен на любой защищенный HTTP-запрос данных. Взгляните на управление OAuth, это то же самое. – lin

+0

Как сделать токен? –

+0

Например '$ token = md5 ('what-ever-you-want');' – lin

ответ

0

Другой ответ является правильным. Хорошая практика общения с бэкэнд с помощью API, потому что AngularJS создан для SPA. Однако, если вы настаиваете на использовании сеанса, все в порядке. Вы можете создать маршрутизатор, такие как /api/logincheck

PHP:

public function index() 
{ 
    $res = ['login'=>false]; 
    if(isset($_SESSION['authid'])) 
    { 
     $res['login'] = true; 
    } 
    echo json_encode($res); 
} 

JS:

$http.get('http://XX/api/checklogin').success(function(res){ 
    if(res.login) 
    { 
     #handle it 
    } 
}); 
+0

booom, я получил его ........ –

0

Вы должны создать уникальный маркер сеанса в вашем внутреннем интерфейсе без разбора PHP -Session устанавливает прямо в ваш клиент. Помните, что AngularJS предназначен для SPA. Таким образом, ваш клиент связывается с бэкэнд с помощью API. Например, RESTful API. После того, как пользователь выполнил вход через клиент, верните уникальный токен сеанса клиенту. Поместите и подтвердите этот токен на каждый защищенный HTTP-запрос данных. Взгляните на oAuth handling, его же.

Вы можете создать токен просто так: $token = md5('what-ever-you-want'); и реализовать его в своей логике API. Здесь вы найдете дополнительную информацию о handling security interfaces.

enter image description here