Advertisement
langbung01

oauthocntroller

Aug 21st, 2018
365
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 6.63 KB | None | 0 0
  1. <?php
  2.  
  3. namespace App\Http\Controllers\OAuth;
  4. use GuzzleHttp\Client;
  5. use Illuminate\Http\Request;
  6. use App\Http\Controllers\Controller;
  7. use App\User;
  8. use Webpatser\Uuid\Uuid;
  9. use Illuminate\Support\Facades\DB;
  10. use Auth;
  11. // use DB;
  12.  
  13. class OAuthController extends Controller
  14. {
  15.     public function login(Request $request){
  16.         $username = $request->input("username");
  17.         $password = $request->input('password');
  18.         // dd($username." ".$password);
  19.         $result = $this->getTokenByPasswordGrant($username,$password);
  20. //        dd($result);
  21.         // return $result;
  22.         // return view("home");
  23.         if($result){
  24.             $userModel = User::where('username', "$username")->first();
  25.             // $userModel = $users = DB::table('users')->where('username', '=', "$username")->get();
  26.             // dd($userModel);
  27.             Auth::login($userModel);
  28.  
  29.             return view("home");
  30.         }else{
  31.             return view("auth.login");
  32.         }
  33.     }
  34.  
  35.     public function requestAuth () {
  36.         $query = http_build_query([
  37.             'client_id'     => env("CLIENT_ID"),
  38.             'redirect_uri'  => env("REDIRECT_URI_AUTHORIZATION_CODE"), //redirect ของเว็บนี้ ที่ให้ปลื้มแก้ครับ
  39.             'response_type' => 'code',
  40.             'scope'         => '',
  41.         ]);
  42.         // return redirect(env("BACKEND_IP").'/api/oauth/getcode?'. $query);
  43.         // dd(env("BACKEND_IP").'/api/oauth/getcode?'. $query);
  44.         return redirect(env("BACKEND_IP").'/api/oauth/getcode?'. $query);
  45.     }
  46.  
  47.     public function callbackAuth(Request $request) {
  48. //         dd('call back');
  49.         $http = new Client;
  50.         if ($request->code) {
  51.             //dd($request->code);
  52.             // $response = $http->post('http://dev.rita.backend/oauth/token', [
  53.            $response = $http->post(env("BACKEND_IP")."/oauth/token", [
  54.                 'form_params' => [
  55.                     'grant_type'    => 'authorization_code',
  56.                     'client_id'     => env("CLIENT_ID"),
  57.                     'client_secret' => env("CLIENT_SECRET"),
  58.                     'redirect_uri'  => env("REDIRECT_URI_AUTHORIZATION_CODE"),
  59.                     'code'          => $request->code,
  60.                     'scope' => '',
  61.                 ],
  62.             ]);
  63.             $json = json_decode($response->getBody(), true);
  64.             $accessToken = $json['access_token'];
  65.             // dd($accessToken);
  66.             if($accessToken){
  67. //                $userModel = User::where('username', "$username")->first();
  68. //                // $userModel = $users = DB::table('users')->where('username', '=', "$username")->get();
  69. //                // dd($userModel);
  70. //                Auth::login($userModel);
  71. //                return view("home");
  72.                 $accountInfo = $this->getAccount($accessToken);
  73.                 dd($accountInfo);
  74.             }
  75.             return $accountInfo;
  76.         } else {
  77.             return response()->json(['error' => request('error')]);
  78.         }
  79.     }
  80.  
  81.  
  82.  
  83.     public function getTokenByPasswordGrant($username,$password){
  84.         // return "test";
  85.         // $username = $request->input("username");
  86.         // $password = $request->input('password');
  87.         // dd($username." ".$password );
  88.  
  89.         // dd(env('BACKEND_IP'));
  90.         $client = new Client(['base_uri' => env('BACKEND_IP'), 'verify' => false]);
  91.         // $client = new Client();
  92.         // dd($client);
  93.         $response = $client->post('/api/oauth/getpwd', [
  94.             'form_params' => [
  95.                 'grant_type' => 'password',
  96.                 'client_id' => "6",
  97.                 'client_secret' => "eZlHFvbWHK3L7AkwW7xNRxRPtJcgfiHrCp0KuzDp",
  98.                 'username' => $username,
  99.                 'password' => $password,
  100.                 // 'scope' => '',
  101.             ],
  102.             'http_errors' => false,
  103.         ]);
  104.  
  105. //         dd($client);
  106. //         dd($response);
  107. //         dd(json_decode((string)$response->getbody(),true));
  108.         if ($response->getStatusCode() == 200) {
  109.             $accessToken = json_decode((string) $response->getBody(), true)['access_token'];
  110.             session(["accessToken"=>$accessToken]);
  111.             // dd(session("accessToken"));
  112.             $this->getUserAndCreate($accessToken, $username, $password);
  113.             return true;
  114.         }
  115.         // return $response->getStatusCode() == 200 ? true : false;
  116.         return false;
  117.     }
  118.  
  119.     // private function logingIn($username)
  120.     // {
  121.     //     $userModel = User::where('username', $username)->first();
  122.     //     Auth::login($userModel);
  123.     //     $this->sendLoginResponse(\request())->throwResponse();
  124.     // }
  125.  
  126.     public function getAccount($accessToken){
  127.         $client = new Client(['base_uri' => env('BACKEND_IP'), "verify" => false]);
  128.         $response = $client->get('/api/account', [
  129.             'headers' => ['Authorization' => 'Bearer ' . $accessToken],
  130.             'http_errors' => false,
  131.         ]);
  132.         // dd($jsonResponse = json_decode($response->getBody(), true));
  133.         $account = json_decode($response->getBody(), true);
  134.  
  135.         return $account;
  136.     }
  137.  
  138.     public function getAccessToken(){
  139.         return session("accessToken");
  140.     }
  141.  
  142.     private function getUserAndCreate($accessToken, $username, $password)
  143.     {
  144. //        dd("in get user and create");
  145.         // dd($jsonResponse = json_decode($response->getBody(), true));
  146.         $jsonResponse = $this->getAccount($accessToken);
  147.         // dd($jsonResponse);
  148.         $userModel = User::where('username', "$username")->first();
  149. //        dd($userModel);
  150.         // User::where('username', "$username")->update(["updated_at" => Carbon::now()]);
  151.         if (!$userModel)
  152.         {
  153.             $userModel = new User();
  154.             $userModel->id = Uuid::generate()->string;
  155.             $userModel->username = $username;
  156.             $userModel->password = bcrypt($password);
  157.             $userModel->id_passport = $jsonResponse['id_card_num'];
  158.             $userModel->name = $jsonResponse['first_name_eng'];
  159.             $userModel->surname = $jsonResponse['last_name_eng'];
  160.             $userModel->birth_date = $jsonResponse['birth_date'];
  161.             $userModel->phone = $jsonResponse['mobile'][0]['mobile_no'];
  162.             $userModel->nameTH = $jsonResponse['first_name_th'];
  163.             $userModel->surnameTH = $jsonResponse['last_name_th'];
  164.             $userModel->has_onecard = 'I';
  165.             // $userModel->remember_token = $accessToken;
  166.             $userModel->save();
  167.         }
  168.  
  169.     }
  170.  
  171.     public function loginWithPassGrant(){
  172.         return view("login");
  173.     }
  174. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement