Не могу начать php-сессию с angular6 - PullRequest
0 голосов
/ 07 сентября 2018

Я работаю над проектом на angular, используя php в качестве моего бэкэнда, но когда попытался запустить сеанс с моим php из моего angular, он не работает, цель состоит в том, чтобы при регистрации или входе в систему пользователю потребовалось бы на http://localhost:4200/dashboard, и если пользователь должен обновить страницу, angular будет проверять php, чтобы проверить, есть ли у него сеанс, если он имеет сеанс, он будет держать пользователя в этом http://localhost:4200/dashboard или иначе это перенаправило бы его. вот мой код для 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

        <?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://localhost:4200/dashborad после регистрации или входа в систему, это приводит меня к http://localhost:4200. Я не знаю, где я допустил ошибку или почему сеанс не начинается

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...