2015-10-29 19 views
6

Tôi chỉ gặp lỗi này trên máy cục bộ của mình khi tôi cố đăng nhập bằng google hoặc fb. Tôi gần như chắc chắn 100% dịch vụ của tôi và session.php được thiết lập chính xác. Nhưng than ôi, ở đây chúng tôi là ...InvalidStateException trong dòng AbstractProvider.php 191 với mạng xã hội

services.php thiết lập google của tôi:

'google' =>[ 
    'client_id'=> env('GOOGLE_CLIENT_ID'), 
    'client_secret' => env('GOOGLE_CLIENT_SECRET'), 
    'redirect' => "http://". env('DOMAIN'). "/login/google/callback", 
], 

phiên tôi

'domain'=> 'local.mysite.com' 
+0

Hãy xem câu trả lời sau [đây] (http://stackoverflow.com/questions/29629287/laravel-5-geting-invalidstateexception-in-abstractprovider-php) – jakehallas

+0

không có tác phẩm nào ... – joejoeso

+0

Điều này dường như là một vấn đề khá lớn, nhiều người chạy vào điều này nhưng việc chạy câu trả lời của nhà máy trên các cookie không giải quyết được. Tôi đã thử khá nhiều biến thể của cài đặt cookie để không có kết quả. Trong trường hợp của tôi Nó hoạt động tốt trên homestead nhưng không phải trên máy chủ sản xuất, vì vậy nó cho tôi biết một cái gì đó giữa 2 môi trường đang gây ra nó (đã thử phiên làm cơ sở dữ liệu và tệp để không cho phép tệp) –

Trả lời

0

Một vài tùy chọn bạn có thể thử:

  • Dẫn đầu với http:// trong tệp phiên của bạn cho miền của bạn như sau:

    'domain'=> 'http://local.mysite.com'

  • Đảm bảo giao thức miền & không phân biệt khi đưa ra yêu cầu & nhận được yêu cầu.

  • Đảm bảo rằng địa chỉ xuất xứ & địa chỉ chuyển hướng được định cấu hình trong bảng điều khiển google khớp với các tuyến đường được định cấu hình trong ứng dụng của bạn.

  • Chạy các lệnh sau từ bảng điều khiển của bạn. php artisan cache:clear & composer dump-autoload

  • Cuối cùng, xóa bộ nhớ cache của trình duyệt & cookie.

3

Sự cố liên quan đến phiên của bạn, luôn luôn là vấn đề khó nắm bắt. Trong oAuth2, bạn có thể cung cấp thông số state khi gửi người dùng để xác thực, sau đó nó được gửi lại với người dùng đến ứng dụng của bạn sau khi họ đã xác thực.

Mạng xã hội đặt một chuỗi ngẫu nhiên vào phiên và thông số state này và kiểm tra nó có chứa cùng giá trị khi người dùng quay lại.

Xem dòng 134 và 212. https://github.com/laravel/socialite/blob/e04ab0bb972662fc72708dfd4eef35200965cca1/src/Two/AbstractProvider.php#L134

Theres một vài giải pháp để cố gắng ...

điều

Trước tiên, bạn có thể đăng nhập chỉ sử dụng tên đăng nhập và mật khẩu của bạn thay vì oauth google?

Kiểm tra miền config/session.php được đặt chính xác và tùy chọn https chỉ được đặt thành true nếu bạn đang chạy qua HTTPS. Nếu tùy chọn https được bật thì các phiên sẽ chỉ được đặt khi trang web được truy cập qua. https.

'domain' => 'example.com', 

Nếu bạn đang sử dụng tên miền phụ trong ứng dụng của bạn thêm vào trước một . khi bắt đầu tên miền của bạn trong cấu hình phiên của bạn. Điều này sẽ cho phép phiên chuyển sang tất cả các tên miền phụ.

'domain' => '.example.com', 

Khi bạn được gửi thông qua google đăng nhập bạn sẽ thấy các thông số state vào URL, kiểm tra trạng thái này cũng được trả về khi trở lại ứng dụng của bạn.

Bạn cũng có thể thử xóa cookie và bộ nhớ cache của trình duyệt (hoặc sử dụng cửa sổ ẩn danh) điều này đảm bảo không có xung đột giữa các kiểm tra trước đó/cookie hiện tại của bạn.

Bạn cũng có thể thử cài đặt lại các phụ thuộc của mình bằng cách xóa thư mục /vendor và chạy lại composer install. Điều này đối với tôi trong quá khứ đã giải quyết vấn đề với các phiên vì lý do không rõ.

+0

Không có gì liên quan đến cookie, tôi có thể hiểu rằng điều này có vẻ như câu trả lời nhưng tôi đã dành khoảng 6 giờ để thử mọi thứ có thể với cài đặt cookie, đặt lại chúng mỗi lần để kiểm tra nhưng không có gì có hiệu lực. Tuy nhiên 'bạn sẽ thấy tham số trạng thái trên URL' khiến tôi suy nghĩ và điều đó đã giúp tôi trả lời (sẽ đăng nó). –

+0

Cũng tham số trạng thái được lưu trữ trong phiên, vì vậy lý do cho nó không phù hợp chỉ có thể là một sự kiện gì đó sai với các phiên. Khi chúng được lưu lại hoặc có điều gì đó khác xảy ra với chúng, nhiều thông tin hơn có thể đã đi một chặng đường dài :) – Wader

+1

Thực sự là một chẩn đoán khó, nhưng hãy xem câu trả lời tôi đã đăng, với tất cả săn bắn của tôi và nhìn thấy gì, nhưng cookie tôi phải đối mặt với lòng bàn tay khi tôi phát hiện ra vấn đề là gì lol. –

0

đã có cùng một vấn đề, không ai trong số các giải pháp làm việc sau đó tôi nhận được câu trả lời:

Kiểm tra tập tin .env của bạn và chắc chắn rằng SESSION_DRIVER được không đặt để mảng

phiên Mảng sẽ không tồn tại, và đây là lý do tại sao Socialite không thể xác minh trạng thái và trả về lỗi này.

Bạn có thể thiết lập:

SESSION_DRIVER=file 

hoặc chọn từ loại này (trừ mảng): https://laravel.com/docs/5.0/session#session-drivers

Nếu bạn sử dụng memcached/redis/cơ sở dữ liệu hoặc cookie đảm bảo rằng chúng được cấu hình và làm việc.

0

Tôi đã gặp lỗi tương tự và tôi đã giải quyết nó đưa tất cả các tuyến đường xã hội vào phần mềm trung gian trên web.

Chúng tôi cần \ Illuminate \ Session \ Middleware \ StartSession để bắt đầu phiên.

+0

sử dụng Auth; trong trình điều khiển bạn gọi phương thức nhà cung cấp – hendra1

Các vấn đề liên quan