PHP-сессия не работает в проекте Angular 6

Я использую Angular 6 для внешнего интерфейса и PHP для внутреннего интерфейса (WAMP), и я хочу сделать систему входа в систему. Когда кто-то вводит действительные учетные данные, я хочу, чтобы его перенаправили на HTTP: // локальный: 4200 / дом

я имею auth.php который устанавливает переменные сеанса, когда кто-то вводит правильное имя пользователя / пароль и verify.php проверить, установлены ли переменные сеанса.
Хотя приложение перенаправляет меня на дом, verify.php не может видеть переменные сеанса.

Это мои файлы:

регистрационное_имя form.component.ts

loginUser(event) {
const target = event.target;
const username = target.querySelector('#username').value;
const password = target.querySelector('#password').value;

this.Auth.login(username, password).subscribe(data => {
if(data.success) {
this.router.navigate(['/home']);
}
else {
window.alert(data.message);
}
});
}

который берет имя пользователя и пароль из html и отправляет их в сервис

auth.service.ts

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http'

interface myData {
success: boolean,
message: string
}

@Injectable({
providedIn: 'root'
})
export class AuthService {

constructor(private http: HttpClient) { }

login(username, password) {
return this.http.post<myData>('http://localhost/angular6-app/api/auth.php', {username, password},
{
headers : {
'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8'
}
})

}

auth.php

include 'config.php';
header('Access-Control-Allow-Origin: http://localhost:4200');

$postdata = file_get_contents("php://input");
if(isset($postdata) && !empty($postdata)) {

$request = json_decode($postdata);
$username = $request->username;
$password = $request->password;
$sql = "select * from user where username = '$username'";
$result = $conn->query($sql);
$row = $result->fetch_assoc();

if($row['username'] == $username && password_verify($password, $row['password'])) //kanei verify me to hash pou exei ginei
{
$_SESSION['username'] = $username;
$_SESSION['loggedin'] = true;
?>
{
"success": true,
"message": "You have logged in"}
<?php
}
else {
?>
{
"success": false,
"message": "Invalid credentials"}
<?php
}
}

?>

и наконец verify.php

<?php
session_start();
header('Access-Control-Allow-Origin: http://localhost:4200');

if (isset($_SESSION['loggedin'])) {
?>
{
"success": true,
"message": "You have the right."
}
<?php
}
else {
?>
{
"success": false,
"message": "You DONT have the right."}
<?php
}

?>

мой home.component.ts имеет этот класс, и я хочу отобразить в HTML «У вас есть право», но он отображает «У вас нет права», потому что переменная LoggedIn не определено

export class HomeComponent implements OnInit {

message = "Loading..."
constructor(private user: UserService) { }

ngOnInit() {
this.user.getSomeData().subscribe(data => {
this.message = data.message;
})
}

getSomeData () реализован в user.service.ts

getSomeData() {
return this.http.get<myData>('http://localhost/angular6-app/api/verify.php');
}

Есть ли способ исправить эту проблему с помощью сессии или мне нужно использовать другой метод проверки в угловых?

Спасибо.

0

Решение

Вы не можете установить SESSION в одном домене и использовать в другом домене. Из вашего кода ясно, что вы используете два разных порта, если вы хотите использовать сессии, javascript и PHP должны быть в одном домене / портах.

Если вы хотите использовать другие домены / порты, вам нужно найти другие способы, такие как аутентификация на основе токенов, т.е. в auth.php после успешного входа в систему создайте токен, который будет сохранен в вашей базе данных, и отправьте этот токен в вашем успешном ответе.

сохраните этот токен в хранилище (или там, где вы предпочитаете) и извлеките данные об использовании из вашего PHP API, используя этот токен.

поэтому, когда вы делаете звонок в user.service.ts Ваш URL должен содержать токен

YOUR_TOKEN = '1234'//received after successfull login and saved in local storage
return this.http.get<myData>('http://localhost/angular6-app/api/verify.php?token='+YOUR_TOKEN);

в вашем verify.php

$token = $_GET['token'];
// check if token is valid in your database and send response

При выходе из системы убедитесь, что токен истекает или удаляется из хранилища и базы данных angulare.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector