Advertisement
Guest User

Untitled

a guest
May 19th, 2016
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 6.20 KB | None | 0 0
  1. <?php
  2.  
  3. /** @var Dingo\Api\Routing\Router $api */
  4. $api = app('Dingo\Api\Routing\Router');
  5.  
  6. $api->version('v1', function ($api) {
  7.    
  8.     /** @var Dingo\Api\Routing\Router $api */
  9.     $api->group([
  10.         'namespace' => 'App\Http\Controllers',
  11.         'middleware' => '\Barryvdh\Cors\HandleCors::class',
  12.         'domain' => 'test-api.jashka'], function ($api) {
  13.         /** @var Dingo\Api\Routing\Router $api */
  14.        
  15.         $api->post('login', 'Auth\AuthController@authenticate');
  16.         $api->post('register', 'Auth\AuthController@register');
  17.         $api->post('check-email', 'Auth\PasswordController@checkEmail');
  18.         $api->post('reset-password', 'Auth\PasswordController@resetPassword');
  19.  
  20.         $api->post('/user/create', 'UserController@store');
  21.  
  22.         $api->group(['middleware' => 'jwt.auth','providers' => ['basic', 'jwt']], function (
  23.             $api) {
  24.             /** @var Dingo\Api\Routing\Router $api */
  25.            
  26.             $api->resource('user', 'UserController');
  27.             $api->get('user/me', 'UserController@me');
  28.         });
  29.  
  30.     });
  31. });
  32.  
  33.  
  34.  
  35. <?php
  36.  
  37. namespace App\Http\Controllers\Auth;
  38.  
  39. use App\Http\Controllers\Controller;
  40. use Validator;
  41. use Illuminate\Http\Request;
  42. use App\User;
  43. use Session;
  44. use Hash;
  45. use Mail;
  46.  
  47. class PasswordController extends Controller
  48. {
  49.     public function resetPassword (Request $request) {
  50.  
  51.         $email = $request->get('email');
  52.         $password = $request->get('password');
  53.         $token = $request->get('token');
  54.  
  55.         $user = User::where('email', '=', $email)
  56.                     ->where('remember_token', '=', $token)
  57.                     ->first();
  58.  
  59.         if ( $user ) {
  60.             $user->password = Hash::make($password);
  61.             $user->remember_token = '';
  62.             if ($user->save()) {
  63.                 return $this->message('changed');
  64.             }
  65.         }  
  66.  
  67.         return response()->json(['error' => trans('auth.access_denied')], 403);
  68.     }
  69.  
  70.     protected function validRequest ($request) {
  71.         $validator = Validator::make($request, User::$validatorRules);
  72.         return $validator->fails() === true ? false : true;
  73.     }
  74.  
  75.     protected function message ($status, $httpCode = 200) {
  76.         return response()->json([
  77.                     'data' => [
  78.                         'status' => $status
  79.                         ]
  80.                 ], $httpCode);
  81.     }
  82.  
  83.     protected function sendUserMessage ($data) {
  84.         Mail::send('email.reminder', ['user' => $data['user'], 'token' => $data['token'] ],
  85.             function ($message) use ($data) {
  86.             $message->to($data['user']->email, $data['user']->name . ' ' . $data['user']->lastname)
  87.                 ->subject('Reset your password');
  88.         });
  89.  
  90.     }
  91.  
  92.     public function checkEmail (Request $request) {
  93.         $email = $request->get('email');
  94.  
  95.         if (!$this->validRequest($request->all())) {
  96.             return response()->json(['error' => trans('auth.not_valid_email')], 400);
  97.         }
  98.  
  99.         $user = User::where('email', '=', $email)->first();
  100.         if ( $user ) {
  101.             $token = bin2hex(random_bytes(50));
  102.  
  103.             if (strlen($user->remember_token) > 10) {
  104.                 return response()->json(['error' => trans('passwords.reset_password_was_send')], 417);
  105.             }
  106.  
  107.             /*$user->remember_token = $token;
  108.             // не буду слать письма пока, что бы в спам лист не попасть, все работает
  109.             $user->save();
  110.  
  111.             $this->sendUserMessage([
  112.                 'user' => $user,
  113.                 'token' => $token
  114.             ]);*/
  115.  
  116.             return $this->message($user->email);
  117.         }
  118.  
  119.         return response()->json(['error' => trans('passwords.user')], 500);
  120.     }
  121. }
  122.  
  123.  
  124.  
  125. <?php
  126.  
  127. namespace App\Http\Controllers\Auth;
  128.  
  129. use App\User;
  130. use Dingo\Api\Facade\API;
  131. use Illuminate\Validation\Validator;
  132. use Illuminate\Http\Request;
  133. use Tymon\JWTAuth\Facades\JWTAuth;
  134. use Tymon\JWTAuth\Exceptions\JWTException;
  135. use App\Http\Controllers\Controller;
  136. use DB;
  137. use Hash;
  138. use Illuminate\Foundation;
  139.  
  140. class AuthController extends Controller
  141. {
  142.     protected function validator(array $data) {
  143.         return Validator::make($data, [
  144.             'name' => 'required|max:255',
  145.             'email' => 'required|email|max:255|unique:users',
  146.             'password' => 'required|min:6|confirmed',
  147.             ]);
  148.     }
  149.  
  150.     protected function create(array $data) {
  151.         return User::create([
  152.                 'name' => $data['name'],
  153.                 'email' => $data['email'],
  154.                 'password' => bcrypt($data['password']),
  155.             ]);
  156.     }
  157.  
  158.     protected function isActivated ($credentials) {
  159.         $user = DB::table('users')->select(['is_activated', 'password'])
  160.             ->where('email', '=', $credentials['email'])
  161.             ->first();
  162.         if ($user) {
  163.             if (Hash::check($credentials['password'], $user->password)) {
  164.                 return $user->is_activated ?? false;
  165.             }
  166.         }
  167.     }
  168.  
  169.     public function authenticate(Request $request) {
  170.         $credentials = $request->only('email', 'password');
  171.  
  172.         try {
  173.             if (! $token = JWTAuth::attempt($credentials)) {
  174.                 return response()->json(['error' => trans('auth.failed')], 401);
  175.             }
  176.         } catch (JWTException $e) {
  177.             return response()->json(['error' => trans('auth.could_not_create_token')], 500);
  178.         }
  179.  
  180.         if (!$this->isActivated($credentials)) {
  181.             return response()->json(['error' => trans('auth.account_not_activated')], 403);
  182.         }
  183.  
  184.         return response()->json(compact('token'));
  185.     }
  186.  
  187.     public function validateToken() {
  188.         return API::response()->array(['status' => trans('auth.success')])->statusCode(200);
  189.     }
  190.  
  191.     public function register(Request $request) {
  192.         $newUser = [
  193.             'name' => $request->get('name'),
  194.             'email' => $request->get('email'),
  195.             'password' => bcrypt($request->get('password')),
  196.         ];
  197.         $user = User::create($newUser);
  198.         $token = JWTAuth::fromUser($user);
  199.         return response()->json(compact('token'));
  200.     }
  201. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement