Я работаю над проектом на angular с использованием php в качестве моего бэкэнда, но когда попытался запустить сеанс с моим php от моего angular, он не работает, цель состоит в том, чтобы при регистрации или входе в систему пользователю потребовалось бы HTTP: // локальный: 4200 / панель и если пользователь должен обновить страницу, angular будет проверять php, чтобы проверить, есть ли у него сеанс, если у него есть сеанс, он будет держать пользователя в этом HTTP: // локальный: 4200 / панель иначе это перенаправит его. вот мой код для data.service.ts
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Router } from '@angular/router';
import { map } from 'rxjs/operators';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class DataService {
theurl: string='http://127.0.0.1/testing/php/';
public isLoggin = false;
constructor(private http: HttpClient, public route: Router) {}
setLoggedInStatus(value: boolean){
this.isLoggin= value
}
get isLoggedIn(){
return this.isLoggedIn
}
checkLogin(): Observable<cklogin>{
return this.http.get<cklogin>(this.theurl+'check_session.php');
}
}
interface cklogin{
status: boolean;
}
А для auth guard это auth.guard.ts
import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { Observable } from 'rxjs';
import { DataService } from './service/data.service';
import { HttpClient } from '@angular/common/http';
import { Router } from '@angular/router';
import { map } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate {
constructor(private serv: DataService, private route: Router, public http: HttpClient){}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
if(this.serv.isLoggin){
return true;
}
return this.serv.checkLogin().pipe(map(res=> {
return res.status;
}));
}
}
interface cklogin{
status: boolean;
}
И для register.component.ts
import { Component, OnInit } from '@angular/core';
import { DataService } from '../service/data.service';
import { HttpClient } from '@angular/common/http';
import { Register } from './register';
import { Router } from '@angular/router';
@Component({
selector: 'app-register',
templateUrl: './register.component.html',
styleUrls: ['./register.component.css']
})
export class RegisterComponent implements OnInit {
public submitted = false;
public setputt: any = '';
public checham: boolean = false;
public hasError = true;
constructor(
private http: HttpClient,
private dataservice: DataService,
private route: Router
) { }
model = new Register('','','', 0);
ngOnInit() { }
onSubmit(...event: Register[]) {
this.submitted = true;
this.http.post<eloike>(this.dataservice.theurl+'signup.php', event[0]).subscribe(
data => {
if(data.success){
this.checham = true;
this.hasError = false;
this.dataservice.isLoggin = true;
this.route.navigate(['dashboard']);
this.setputt = data.message;
}
else{
this.submitted = false;
this.setputt = data.message;
}
},
error => {
this.submitted = false;
console.log("Error", error);
}
);;
}
}
interface eloike{
'success': 'boolean',
'message': 'string'
}
для регистрации
<?php
session_start();
require_once 'conn.php';
$info = json_decode(file_get_contents('php://input'));
if(count($info)>0){
$username = mysqli_real_escape_string($conn, $info->username);
$password = mysqli_real_escape_string($conn, $info->password);
$email = mysqli_real_escape_string($conn, $info->email);
$phoneNumber = mysqli_real_escape_string($conn, $info->phoneNumber);
$query = mysqli_query($conn, "INSERT INTO users (username, email, `password`, phoneNumber) VALUES ('".$username."', '".$email."', '".$password."', '".$phoneNumber."')");
if($query){
$_SESSION['checklogin'] = $username;
$msg = '
{
"success": true,
"message": "Data Added Successfully"}';
}
else{
$msg = '
{
"success": false,
"message": "Data not added Successfully"}';
}
}
echo $msg;
?>
для check_session.php
<?php
require_once 'conn.php';
if(isset($_SESSION['checklogin'])){
echo '{"status": true}';
}
else{
echo '{"status": false}';
}
?>
для conn.php
<?php
error_reporting( ~E_DEPRECATED & ~E_NOTICE );
ob_start();
session_start();
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method, Authorization");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
$conn = mysqli_connect('localhost', 'root', '', 'angular');
?>
Когда я обновляю HTTP: // локальный: 4200 / dashborad после регистрации или входа, я перехожу на HTTP: // локальный: 4200. Я не знаю, где я допустил ошибку или почему сессия не начинается
Задача ещё не решена.
Других решений пока нет …