Я использую angular 6 для внешнего интерфейса и PHP для внутреннего (WAMP) и хочу создать систему входа в систему.Когда кто-то вводит действительные учетные данные, я хочу, чтобы его перенаправили на http://localhost:4200/home
У меня есть auth.php , который устанавливает переменные сеанса, когда кто-то вводит действительное имя пользователя / парольи verify.php , чтобы проверить, установлены ли переменные сеанса.Хотя приложение перенаправляет меня на дом, verify.php не может видеть переменные сеанса.
Это мои файлы:
login-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
}
?>
My 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');
}
Есть ли способ исправить эту проблему с помощью сеанса или мне нужно использовать другой метод проверки в angular?
Спасибо.